《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.6.建立必需的檔案和符號連結
有些程式裡會使用寫死的路徑呼叫其它暫時還未安裝的程式。為了滿足這種型別程式的需要,我們將建立一些符號連結,在完成本章內容後這些軟體會安裝好,並替代之前的符號連結:
ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin ln -sv /tools/bin/perl /usr/bin ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib sed `s/tools/usr/` /tools/lib/libstdc++.la > /usr/lib/libstdc++.la ln -sv bash /bin/sh
每個軟連結的目的:
-
/bin/bash
-
許多 bash 指令碼指定了
/bin/bash
。 -
/bin/cat
-
這個路徑在 Glibc 的配置指令碼里寫死了。
-
/bin/echo
-
這個是為了滿足 Glibc 測試套件裡的一個測試用例,它會檢測
/bin/echo
。 -
/bin/pwd
-
某些 configure 指令碼,特別是 Glibc 的,寫死了這個路徑。
-
/bin/stty
-
這個路徑在 Expect 軟體中寫死了,所以在 Binutils 和 GCC 測試套件中會需要它。
-
/usr/bin/perl
-
許多 Perl 指令碼寫死了這個路徑呼叫 perl 執行程式。
-
/usr/lib/libgcc_s.so{,.1}
-
Glibc 需要這個讓 pthreads 庫正常工作。
-
/usr/lib/libstdc++{,.6}
-
在 Glibc 的一些測試套件中需要這個,而且在 GMP 的 C++ 支援中也會需要。
-
/usr/lib/libstdc++.la
-
這個可以預防引用
/tools
位置,在裝好 GCC 後新的引用位置是/usr/lib/libstdc++.la
。 -
/bin/sh
-
許多 shell 指令碼寫死了位置
/bin/sh
。
由於歷史原因,Linux 在檔案/etc/mtab
中維護一個已掛載檔案系統的列表。而現代核心改為在內部維護這個列表,並通過
/proc
檔案系統輸出給使用者。為了滿足一些依賴 /etc/mtab
檔案的應用程式,我們要建立下面的符號連結:
ln -sv /proc/self/mounts /etc/mtab
為了讓 root
使用者能正常登入,而且 root
的名字能被正常識別,必須在檔案 /etc/passwd
和
/etc/group
中寫入相應的內容。
執行下面的命令建立 /etc/passwd
檔案:
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false
systemd-network:x:76:76:systemd Network Management:/:/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
root
使用者的實際密碼(這裡的
“x” 只是佔位符)將在後面建立。
執行下面的命令建立 /etc/group
檔案:
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
systemd-bus-proxy:x:72:
systemd-journal-gateway:x:73:
systemd-journal-remote:x:74:
systemd-journal-upload:x:75:
systemd-network:x:76:
systemd-resolve:x:77:
systemd-timesync:x:78:
nogroup:x:99:
users:x:999:
EOF
這裡建立的使用者組沒有參照任何標準 — 它們一部分是為了滿足本章中配置 Udev 的需要,還有一部分來自一些現存 Linux
發行版的通用設定。另外,某些測試套件也依賴特定使用者或組。而 Linux 標準規範 (LSB,參見http://www.linuxbase.org)只要求以組 ID(GID)為 0 建立使用者組 root
以及以 GID 為 1 建立使用者組 bin
。系統管理員可以自由分配其它所有使用者組名字和 GID,因為優秀的程式不會依賴
GID 數字,而是使用組名。
為了移除 “I have no name!” 的提示符,可以開啟一個新 shell。由於完整的 Glibc 已經在 第五章 裡裝好了,而且已經建立好了
/etc/passwd
和 /etc/group
檔案,使用者名稱和組名就可以正常解析了:
exec /tools/bin/bash --login +h
注意這裡使用了 +h
引數。這樣會告訴
bash 不要使用它內建的路徑雜湊功能。而不加這個引數的話,
bash 將會記住曾經執行過程式的路徑。為了在新編譯安裝好程式後就能馬上使用,引數
+h
將在本章中一直使用。
程式 login,agetty 和
init(還有一些其它的)會使用一些日誌檔案來記錄資訊,比如誰在什麼時候登入了系統。不過,在日誌檔案不存在的時候這些程式一般不會寫入。下面初始化一下日誌檔案並加上合適的許可權:
touch /var/log/{btmp,lastlog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp
檔案 /var/log/wtmp
會記錄所有的登入和登出動作。檔案
/var/log/btmp
會記錄失敗的登入嘗試。
注意
檔案 /run/utmp
會記錄當前已登入的使用者。這個檔案會在啟動指令碼中動態建立。
注:下面的注意事項為譯者根據第五章新增。
相關文章
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.70.關於除錯符號Linux除錯符號
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.72.清理Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.3.軟體包管理Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.17.GCC-4.9.2LinuxGC
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.61.Make-4.1Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.13.Binutils-2.25Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.59.Kmod-19Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.40.Expat-2.1.0Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.42.Perl-5.20.2Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.63.Systemd-219Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.20.Ncurses-5.9Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.9.Glibc-2.21Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.39.GDBM-1.11Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.14.GMP-6.0.0aLinux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.11.Zlib-1.2.8Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.43.XML::Parser-2.44LinuxXML
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.18.Bzip2-1.0.6Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.37.Bc-1.06.95Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.7.Linux-3.19API標頭檔案LinuxAPI
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.60.Libpipeline-1.4.0Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.30.Iana-Etc-2.30Linux
- 《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.71.再次清理無用內容Linux
- 檔案描述符和檔案系統
- i.MX6ULL終結者Linux檔案系統的構建BusyBox構建根檔案系統Linux
- 根檔案系統構建
- 檔案系統的物理結構分配
- Win10系統安裝軟體提示不能建立臨時檔案安裝中止如何解決Win10
- 【Solaris】Solaris檔案系統管理1 UFS檔案系統的建立
- 【Solaris】Solaris檔案系統管理3 ZFS檔案系統的建立
- Linux下的檔案系統結構Linux
- 根檔案系統簡介與BusyBox構建根檔案系統
- win10系統如何解除安裝內建應用_win10系統解除安裝內建軟體的方法Win10
- 為媒體資產構建一個雲原生的檔案系統
- VFS檔案系統結構分析
- 【git】Ubuntu作業系統上安裝Git LFSGitUbuntu作業系統
- Linux系統中有哪些比較重要的檔案系統結構?Linux
- Linux系統(二)軟體的安裝與解除安裝Linux
- Linux 檔案系統的目錄結構Linux