這個 SD 卡既已不能啟動登入 X Window 系統,那要怎麼開機呢?
還好 linux 上有
chroot
chroot是在unix系統的一個操作,針對正在運作的軟體行程和它的子行程,改變它外顯的根目錄。一個運行在這個環境下,經由chroot設定根目錄的程式,它不能夠對這個指定根目錄之外的檔案進行存取動作,不能讀取,也不能更改它的內容。chroot這一特殊表達可能指chroot(2)系統呼叫或chroot(8)前端程式。
由chroot創造出的那個根目錄,叫做「chroot監獄」(chroot jail,或chroot prison)。
歷史
1979年,在開發Version 7 Unix時,chroot系統呼叫首次問世。1982年3月18日,在4.2BSD發布前17個月,比爾·喬伊(Bill Joy)將chroot機制移植到BSD系統上,主要用於測試安裝和構建系統。
1991年,威廉·齊斯韋克(William Cheswick)開發出第一個蜜罐程式,來監視入侵駭客的行動。他使用了chroot來進行實作,這是chroot最早被用於開發程式的先例,也因此,chroot創造出的根目錄空間,之後被人稱為軟體監獄(chroot jail)。
2000年,FreeBSD團隊,將原本chroot機制,導入虛擬化技術的概念,開發了新的jail系統命令,伴隨著FreeBSD 4.0版一同發布。
2004年,因為駭客開發出許多可以破解chroot機制的方法,出現了jailbreak這個術語。
2005年,昇陽電腦在Solaris系統上開發出Solaris Containers,稱它是吃了類固醇的chroot(chroot on steroids)。
2006年,Linux內核中開發出cgroups。2007年,被加到Linux 2.6.24版內核中。2008年,基於cgroups,開發出LXC,以及Docker。2013年被加入Linux 3.8版中。
應用
應用chroot,可以建立並執行一個隔離的虛擬軟體系統拷貝。這對於以下應用是十分有用的:
- 測試和開發
- 可以經由chroot建立一個測試環境,用來測試軟體。這可以減少將軟體直接布署到整個生產系統中可能造成的風險。
- 依賴控制
- 可以在chroot建立的環境下,進行軟體開發,組建以及測試,只保留這個程式需要的軟體依賴。這可以避免在系統中預先安裝的各種軟體庫,影響到開發,造成軟體開發者在組建軟體時,可能遇到一些連結衝突。
- 相容性
- 早期遺留軟體或使用不同應用二進位介面(ABI)的軟體,因為它們提供的軟體庫和宿主機的庫之間,可能發生名稱或連結衝突,可以在chroot環境下執行,以保持系統安全。
- 修復
- 當一個系統不能啟動時,可以使用chroot,先從另一個根檔案系統(比如從安裝媒體,或是Live CD)下開機,之後再回到受損的環境中,重新修正系統。
- 特權分離
- 將允許開啟檔案描述子(例如檔案,管線或 是網路連線)的程式放到chroot下執行,不用特地將工作所需的檔案,放到chroot路徑底下,這可以簡化軟體監獄的設計。chroot簡化了安全設 計,可以創造出一個沙盒環境,來執行一個有潛在危險的特權程式,以先期防禦可能的安全漏洞。但值得注意的是,chroot沒有足夠能力去防禦一個擁有 root特權的行程造成危害。
環境,何不假借可開機者執行 raspi-config 將之改為終端機登錄乎?
pi@raspberrypi:~ sudo mount /dev/sda2 /mnt pi@raspberrypi:~ sudo mount /dev/sda1 /mnt/boot pi@raspberrypi:~ ls bin boot.bak etc lib man mnt proc run srv tmp var boot dev home lost+found media opt root sbin sys usr pi@raspberrypi:/mnt sudo mount -o bind /dev /mnt/dev pi@raspberrypi:~ sudo mount -o bind /dev/shm /mnt/dev/shm pi@raspberrypi:~ sudo chroot /mnt /bin/bash root@raspberrypi:/# ls bin boot.bak etc lib man mnt proc run srv tmp var boot dev home lost+found media opt root sbin sys usr root@raspberrypi:/# raspi-config root@raspberrypi:/# root@raspberrypi:/# exit exit pi@raspberrypi:~
果然 OK 耶!
初步看來顯示器正常, X 視窗管理程式 lightdm 死也。
pi@raspberrypi:~
pi@raspberrypi:~ ps -ef | grep X pi 662 640 0 17:08 pts/0 00:00:00 grep --color=auto X pi@raspberrypi:~ systemctl status lightdm.service ● lightdm.service - Light Display Manager Loaded: loaded (/lib/systemd/system/lightdm.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: man:lightdm(1) pi@raspberrypi:~ $