《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
會記錄當前已登入的使用者。這個檔案會在啟動指令碼中動態建立。
注:下面的注意事項為譯者根據第五章新增。
相關文章
- i.MX6ULL終結者Linux檔案系統的構建BusyBox構建根檔案系統Linux
- 檔案描述符和檔案系統
- 根檔案系統構建
- 檔案系統的物理結構分配
- Linux下的檔案系統結構Linux
- Win10系統安裝軟體提示不能建立臨時檔案安裝中止如何解決Win10
- 根檔案系統簡介與BusyBox構建根檔案系統
- 【git】Ubuntu作業系統上安裝Git LFSGitUbuntu作業系統
- Linux系統中有哪些比較重要的檔案系統結構?Linux
- i.MX6ULL終結者Linux檔案系統的構建根檔案系統目錄介紹Linux
- 二、Linux系統安裝和基本使用Linux
- 二、Linux檔案系統結構Linux
- win10系統如何解除安裝內建應用_win10系統解除安裝內建軟體的方法Win10
- 檔案的基本管理和XFS檔案系統備份恢復
- 在電腦科學和作業系統中,檔案控制塊(FCB)和檔案描述符(File Descriptor)是兩種關鍵的資料結構;目錄條目(Directory Entry)作為檔案系統中的基本資料結構;作業系統資料結構
- 何在Mac系統上建立大檔案?教你在Mac系統建立大檔案的方法Mac
- win10系統安裝軟體出現檔案系統錯誤(-2147219196)怎麼解決Win10
- Linux系統中常用的軟體安裝方式Linux
- 環境 | ubuntu16.04系統安裝及基本軟體配置Ubuntu
- [資料庫系統]儲存和檔案結構資料庫
- 為媒體資產構建一個雲原生的檔案系統
- Linux檔案系統目錄結構Linux
- 分散式檔案系統之MogileFS的安裝使用分散式
- 作業系統——裝置驅動和檔案系統作業系統
- linux檔案系統的目錄結構筆記Linux筆記
- Ubuntu 20.04.1 安裝軟體和系統配置指令碼Ubuntu指令碼
- 檔案和檔案系統
- Linux系統中建立檔案常用的方法!Linux
- ubuntu20.04系統右鍵新增建立連結檔案快捷方式的教程Ubuntu
- 教你用 buildroot 構建根檔案系統UI
- HDFS架構指南(分散式系統Hadoop的檔案系統架構)架構分散式Hadoop
- Linux 檔案系統基本介紹Linux
- Linux 檔案系統相關的基本概念Linux
- 如何構建分散式系統的知識體系分散式
- 國產麒麟系統安裝windows軟體Windows
- 關於檔案系統在建立目錄檔案和普通檔案時的區別
- HP-UNIX 建立檔案系統
- Win10系統無法安裝軟體怎麼辦?Win10系統無法安裝軟體的解決方法Win10
- 構建服裝鞋帽行業供應鏈平臺系統,建立扁平化的營銷體系行業