LFS 搭建 1 準(zhǔn)備工作

本文同步發(fā)布于
https://williamgong.github.io/2021/11/19/lfs%E6%90%AD%E5%BB%BA1/

那么,現(xiàn)在就正式開(kāi)始。
目前目標(biāo)機(jī)的硬盤(pán)在宿主機(jī)的位置為/dev/sdb。

分區(qū)

目前的分區(qū)方案如下

分區(qū)位置 大小 類型(掛載點(diǎn))
/dev/sdb1 256M EFI 分區(qū)
/dev/sdb2 4G swap
/dev/sdb3 剩余部分 /

現(xiàn)在采用 parted 進(jìn)行分區(qū)

# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart ESP fat32 1M 257M
(parted) set 1 boot on
(parted) mkpart primary linux-swap 258M 4353M
(parted) mkpart primary ext4 4353M -1

建立文件系統(tǒng)

分區(qū)完成后,接下來(lái)就是格式化。
目前,ESP 分區(qū)采用 fat32,根分區(qū)采用 ext4。

mkfs.vfat /dev/sdb1
mkswap /dev/sdb2
mkfs.ext4 /dev/sdb3

設(shè)置環(huán)境變量

首先,根據(jù) LFS 手冊(cè)的要求,設(shè)置LFS環(huán)境變量。
從現(xiàn)在開(kāi)始,宿主機(jī)就要進(jìn)入 root 進(jìn)行操作了,當(dāng)然理論上一直 sudo 也可以,但為了方便且預(yù)防一些奇奇怪怪的錯(cuò)誤,還是進(jìn)入 root 操作吧。
此處$LFS的值為 LFS 根分區(qū)在宿主機(jī)掛載點(diǎn)的位置。

export LFS=/mnt/lfs

當(dāng)然,也可以直接寫(xiě)在~/.bashrc里,方便。

掛載分區(qū)

現(xiàn)在就可以掛載分區(qū)了。
再設(shè)置好$LFS后,進(jìn)行這些需要輸入路徑的操作就方便多了。
考慮到標(biāo)準(zhǔn)位置,把 ESP 掛載到$LFS/boot/efi下。

# mount /dev/sdb3 $LFS
# mkdir -p $LFS/boot/efi
# mount /dev/sdb1 $LFS/boot/efi

準(zhǔn)備軟件包

首先建立一個(gè)軟件包存放目錄,且這個(gè)目錄 LFS 會(huì)要求打開(kāi)粘滯模式。

mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources

這里使用 ustc 的鏡像,鏡像地址:
http://mirrors.ustc.edu.cn/lfs/lfs-packages/11.0/
本來(lái)要打算使用鏡像里的 wget-list,但是好家伙,打開(kāi)一看地址都是源地址,完美鏡像。
而且此時(shí) LCTT 給的列表是9.0的……
不過(guò)好心的 ustc 給了 tar 包。

# cd $LFS/sources
# wget http://mirrors.ustc.edu.cn/lfs/lfs-packages/lfs-packages-11.0.tar
# tar -xvf lfs-packages-11.0.tar

此處對(duì)文件進(jìn)行一些整理

# mv $LFS/sources/11.0/* $LFS/sources/
# rm -r 11.0/
# rm lfs-packages-11.0.tar

此處也可以檢查下 checksum。

準(zhǔn)備階段收尾工作

該部分主要是設(shè)置目錄,用戶,環(huán)境變量等一系列配置。

建立系統(tǒng)目錄

建立一些之后編譯安裝軟件包時(shí)會(huì)用到的系統(tǒng)目錄。
但此處創(chuàng)建的目錄并不完全。
使用下面的腳本,以 root 運(yùn)行。

#!/bin/bash

mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}

for i in bin lib sbin; do
ln -sv usr/$i $LFS/$i
done

case $(uname -m) in
x86_64) mkdir -pv $LFS/lib64 ;;
esac

建立工具目錄

還要建立一個(gè)存放臨時(shí)工具鏈的目錄。

# mkdir -pv $LFS/tools

相比于 9.0 的手冊(cè),11.0 版本少了將這個(gè)工具目錄連接到/的操作,emmmmmm

創(chuàng)建 LFS 用戶

畢竟在 root 下進(jìn)行編譯是十分危險(xiǎn)的,創(chuàng)建一個(gè)普通用戶很有必要。
雖說(shuō)自用的用戶就行,但在安裝過(guò)程中還要設(shè)置一大堆環(huán)境變量,沒(méi)人想把自己用戶的環(huán)境變量搞得一團(tuán)糟吧?

# groupadd lfs
# useradd -s /bin/bash -g lfs -m -k /dev/null lfs

此處創(chuàng)建用戶的參數(shù)就根據(jù)自己的喜好了。
記得設(shè)置密碼。

# passwd lfs

接下來(lái)要將 $LFS的目錄的所有權(quán)改為 lfs。
因?yàn)橹改咸峁┑氖嵌嘈写a,因此使用腳本運(yùn)行要方便些。

#!/bin/bash
chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools}
case $(uname -m) in
x86_64) chown -v lfs $LFS/lib64 ;;
esac

當(dāng)然這些目錄的所有者后期是要改回來(lái)的,不然會(huì)出事情的。

同時(shí)軟件包源碼目錄的所有者也要改

# chown -v lfs $LFS/sources

現(xiàn)在,就要登錄 lfs 用戶進(jìn)行操作了。
如果要直接切換,使用su - lfs

設(shè)置環(huán)境變量

首先在~/.bash_profile里加上如下內(nèi)容:

exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash

用于清除多余的環(huán)境變量。
之后再在~/.bashrc里加上如下內(nèi)容:

set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE

如果 lfs 使用了其他的 shell,需要根據(jù)具體 shell 確定寫(xiě)入的文件。
比如我用的是zsh,以上內(nèi)容就要寫(xiě)到~/.zprofile~/.zshrc里,同時(shí) shell 的路徑也要相應(yīng)改動(dòng)。
別無(wú)腦寫(xiě)進(jìn) bashrc,不然之后環(huán)境變量沒(méi)配置成功還不知道呢。

最后,運(yùn)行

source ~/.bash_profile

至此,準(zhǔn)備部分結(jié)束。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容