LFS實驗第一次——第一章

環境準備:Centos6.8虛擬機 2G內存 2顆CPU 200G硬盤分區情況:/ 50G ?/boot 1G ?/swap 2G /data 30G 安裝時吧開發工具安裝上(gcc)

LFS

環境準備:

Centos6.8虛擬機

2G內存 2顆CPU 200G硬盤

分區情況:/ 50G ?/boot 1G ?/swap 2G /data 30G

安裝時吧開發工具安裝上(gcc)

安裝手冊:

https://linux.cn/lfs/LFS-BOOK-7.7-systemd/

LFS-BOOK-7.7-systemd

軟件補丁包準備:

ftp.lfs-matrix.net/pub/lfs/lfs-packages/7.7-systemd下的所有

開始安裝LFS前準備

創建一個分區10G

fdisk /dev/sda

格式化分區

mkfs.ext4 /dev/sda6

swap使用宿主主機的,不需要創建

檢測swap是否在使用

/sbin/swapon -v /dev/sda5 (/dev/sda5是swap的掛載分區位置,用lsblk可以查看自己的swap的分區位置)

設置環境變量:

export LFS=/mnt/lfs ??#(把命令添加到/root/.bash_profile配置文檔中)

echo $LFS ?#檢查環境變量

掛載文件系統:

mkdir -pv $LFS ???#創建掛載點

mount -v -t ext4 /dev/sda6 $LFS ???#將sda6以ext4的格式掛載到/mnt/lfs下($LFS是/mnt/lfs的環境變量)

把下載好的軟件包放到系統中:

mkdir -v $LFS/sources

chmod -v a+wt $LFS/sources ?#給軟件存放目錄設置權限和粘滯模式

創建軟件安裝目錄

mkdir -v $LFS/tools

ln -sv $LFS/tools / ?#創建符號鏈接

創建工作用戶和組

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

命令行選項的意思:

-s /bin/bash

把 bash 設置為 lfs 用戶的默認 shell。

-g lfs

這個選項將用戶 lfs 添加到組 lfs 中。

-m

為 lfs 用戶創建主目錄。

-k /dev/null

這個參數通過改變輸入位置為特殊的空(null)設備,以防止可能從一個模版目

錄中(默認是 /etc/skel )復制文件。

lfs

這是創建的組和用戶的實際名稱。

給lfs用戶設置密碼:

passwd lfs

給lfs用設置文件的訪問權限:

chown -v lfs $LFS/tools

chown -v lfs $LFS/sources

最后的工作準備:

su – lsf ?#”- ?”指示su啟動登錄shell,而不是一個非登錄shell

配置一個新.bash_profile文件

cat > ~/.bash_profile << “EOF”

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

EOF

配置一個新.bashrc文件

cat > ~/.bashrc << “EOF”

set +h #關閉bash的哈希功能

umask 022 #設置用戶文件新建掩碼為022

LFS=/mnt/lfs #選定的掛載點

LC_ALL=POSIX #控制特定程序的本地化

LFS_TGT=$(uname -m)-lfs-linux-gnu #一個編譯器非默認的變量,本人也不懂后續再看

PATH=/tols/bin:/bin:/usr/bin #一個外部命令搜索順序的變量

export LFS LC_ALL LFS_TGT PATH

EOF

啟用配置文件

source ~/.bash_profile

構建臨時系統:

cd /mnt/lfs/sources

重要:

編譯指南假定你已經正確地設置了宿主系統需求和符號鏈接:

  • shell 使用的是 bash 。
  • sh 是到 bash 的符號鏈接。
  • /usr/bin/awk 是到 gawk 的符號鏈接。
  • /usr/bin/yacc 是到 bison 的符號鏈接或者一個執行 bison 的小腳

本。

重要:

再次強調構建過程:

  1. 把所有源文件和補丁放到 chroot 環境可訪問的目錄,例如/mnt/lfs/sources/ 。但是 千萬不能把源文件放在 /mnt/lfs/tools/中。
  2. 進入到源文件目錄。
  3. 對于每個軟件包:
  4. 用 tar 程序解壓要編譯的軟件包。在第五章中,確保解壓軟件包時你使用的是 lfs 用 戶。
  5. 進入到解壓后創建的目錄中。
  6. 根據指南說明編譯軟件包。
  7. 回退到源文件目錄。
  8. 除非特別說明,刪除解壓出來的目錄和所有編譯過程中生成的<package> -build 目錄。

安裝交叉編譯的binutils:

tar xf binutils-2.25.tar.bz2 #解壓安裝包

cd binutils-2.25 #到解壓文件下

mkdir -v ../binutils-build #在上一級目錄新建安裝路徑

cd ../binutils-build/ #到安裝路徑下

 

../binutils-2.25/configure \

–prefix=/tools \ #指定安裝位置

–with-sysroot=$LFS \ #在$LFS中查找所需的目標系統庫

–with-lib-path=/tools/lib \ #指定連接器的庫路徑

–target=$LFS_TGT \ #告訴configure腳本調整編譯系統來編譯

–disable-nls \ #禁止國際化(i18n)

–disable-werror #防止警告事件導致的停止編譯

make #繼續編譯

如果是在x86——64上編譯,創建符號鏈接,以確保工具鏈的完整性:

case $(uname -m) in

x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;

esac

安裝軟件包:

make install

安裝交叉編譯的gcc:

cd /mnt/lfs/sources

rm -rf binutils-2.25

tar xf gcc-4.9.2.tar.bz2 #解壓gcc

cd gcc-4.9.2

tar xf ../mpfr-3.1.2.tar.xz && mv -v mpfr-3.1.2 mpfr #解壓并且更改名稱

tar xf ../gmp-6.0.0a.tar.xz && mv -v gmp-6.0.0 gmp

tar xf ../mpc-1.0.2.tar.gz && mv -v mpc-1.0.2 mpc

for file in \

$(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)

do

cp -uv $file{,.orig}

sed -e ‘s@/lib\(64\)\?\(32\)\?/ld@/tools&@g’ \

-e ‘s@/usr@/tools@g’ $file.orig > $file

echo ‘

#undef STANDARD_STARTFILE_PREFIX_1

#undef STANDARD_STARTFILE_PREFIX_2

#define STANDARD_STARTFILE_PREFIX_1 “/tools/lib/”

#define STANDARD_STARTFILE_PREFIX_2 “”‘ >> $file

touch $file.orig

done #這一串命令太多我還有點迷糊,所以不想解釋

GCC不能正確檢測棧保護,這會導致編譯Glibc-2.21是出現問題,用一下命令修復:

sed -i ‘/k prot/agcc_cv_libc_provides_ssp=yes’ gcc/configure

mkdir -v gcc-build && cd gcc-build #新建并且進入到目錄中

準備編譯GCC:

../gcc-4.9.2/configure \

–target=$LFS_TGT \

–prefix=/tools \

–with-sysroot=$LFS \

–with-newlib \

–without-headers \–with-local-prefix=/tools \

–with-native-system-header-dir=/tools/include \

–disable-nls \

–disable-shared \

–disable-multilib \

–disable-decimal-float \

–disable-threads \

–disable-libatomic \

–disable-libgomp \

–disable-libitm \

–disable-libquadmath \

–disable-libsanitizer \

–disable-libssp \

–disable-libvtv \

–disable-libcilkrts \

–disable-libstdc++-v3 \

–enable-languages=c,c++ #不要問我這是啥,我也不知道,大概就是指定了一下目錄,禁用了一些模塊庫什么的吧(一臉懵逼)

運行命令編譯GCC

make

安裝軟件包:

make install

rm -rf gcc-4.9.2

安裝LinuxAPI頭文件:

tar xf linux-3.19.tar.xz

cd linux-3.19

make mrproper #確認沒有陳舊的文件且不依賴于之前的操作

make INSTALL_HDR_PATH=dest headers_install

mkdir /mnt/lfs/tools/include

cp -rv dest/include/* /tools/include #從源代碼中提取用戶可見的內核頭文件,把它們保存到臨時文件夾中然后復制到所需的位置

rm -rf linux-3.19

檢測頭文件是否正確安裝:

if [ ! -r /usr/include/rpc/types.h ]; then

su -c ‘mkdir -pv /usr/include/rpc’

su -c ‘cp -v sunrpc/rpc/*.h /usr/include/rpc’

fi #回車后并沒有什么提示和報錯,應該是沒問題的

 

研究了半天就這點結果,后天繼續研究。

 

未完待續……

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/93721

(1)
老司機丨快上車老司機丨快上車
上一篇 2018-03-29
下一篇 2018-03-29

相關推薦

  • 配置主機與主機通訊可以經過路由器的操作。

    配置主機A與主機B相互通訊,中間經過兩個路由器還能正常通訊的基本操作。

    2018-05-06
  • RHCE考試筆記

    上午RHCSA部分

    Linux筆記 2018-07-14
  • Homework_week5

    1、簡述rpm與yum命令的常見選項,并舉例 RPM rpm是一個功能十分強大的軟件包管理系統,它使得在Linux下安裝、升級和刪除軟件包的工作變的容易、并且具有查詢、驗證軟件包的功能 安裝 rpm {-i|–install} [install-options] PACKAGE_FILE … 選項: -h:-hash,顯示安裝進度 -…

    Linux筆記 2018-07-23
  • 計算機基礎知識

    計算機基礎知識 計算機系統 計算機的功能 馮諾依曼體系的五大基本部件 操作系統 Linux操作系統的組成 操作系統的功能介紹 開發接口標準 操作系統的分類 Linux 操作系統 Linux的發行版詳解 Linux哲學思想 Linux系統鏡像站點 計算機系統 計算機系統由硬件 計算機系統由硬件(Hardware) 系統和軟件(Software)系統兩大部分組成…

    Linux筆記 2018-05-07
  • rsyslog、nsswitch、pam

    rsyslog: 日志:歷史事件日志 歷史事件: 時間,事件 事件級別(日志級別):事件的關鍵性程度; 事件:系統引導啟動、應用程序啟動、應用程序尤其是服務類應用程序運行過程中的一些事件; 系統日志服務: syslog: syslogd: system klogd:kernel 事件格式較為簡單時,可統一由syslog進行記錄: 事件產生的日期時間 主機 進…

    Linux筆記 2018-06-07
  • NGINX服務1

    I/O模型 ?Nginx介紹 ?Nginx安裝 ?Nginx各種模塊

    Linux筆記 2018-07-04
欧美性久久久久