zqhong / pelican-blog

Use Pelican generate static blog site
1 stars 0 forks source link

LFS #8

Open zqhong opened 7 years ago

zqhong commented 7 years ago

第一章 介绍及环境安装

系统:Ubuntu 14.04

sudo add-apt-repository ppa:salehi/bison2

sudo apt-get update

sudo apt-get install Binutils bison build-essential texinfo lzip

wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz
lzip -d gmp-6.1.2.tar.lz
tar xvf gmp-6.1.2.tar
cd gmp-6.1.2
configure && make && sudo make install

wget http://www.mpfr.org/mpfr-current/mpfr-3.1.5.tar.gz
tar xvzf mpfr-3.1.5.tar.gz 
cd mpfr-3.1.5/
./configure && make && sudo make install

wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
tar xvzf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure && make && sudo make install
zqhong commented 7 years ago

第二章 准备新分区

20G 大小硬盘分区

$ sudo fdisk /dev/sdb
Command (m for help): o     // 创建空的 DOS 分区表
Command (m for help): n     // 创建一个新分区
Command (m for help): Enter // 默认主分区
Command (m for help): Enter // 分区1
Command (m for help): Enter // Fist sector 2048
Command (m for help): +100M // 分区 100M 大小 - 对应 /boot

Command (m for help): n     // 创建一个新分区
Command (m for help): Enter // 默认主分区
Command (m for help): Enter // 分区2
Command (m for help): Enter // Fist sector xxx
Command (m for help): +10G // 分区 10G 大小 - 对应 /usr

Command (m for help): n     // 创建一个新分区
Command (m for help): Enter // 默认主分区
Command (m for help): Enter // 分区3
Command (m for help): Enter // Fist sector xxx
Command (m for help): Enter // 分区使用剩余空间 - 对应 /

Command (m for help): p      // 打印当前分区表

Disk /dev/sdb: 23.6 GB, 23595794432 bytes
255 heads, 63 sectors/track, 2868 cylinders, total 46085536 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x92e79b9c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      206847      102400   83  Linux
/dev/sdb2          206848    21178367    10485760   83  Linux
/dev/sdb3        21178368    46085535    12453584   83  Linux

Command (m for help): w     // 确定无误后,向磁盘写入这些改动并退出

参考: Fdisk (简体中文)

zqhong commented 7 years ago

第三章 软件包与补丁

下载软件包

// 创建存放软件包源码的目录
mkdir -v $LFS/sources
// 设置目录的写权限和粘滞模式
// 多个用户都有目录的写权限,但只有创建者有删除权限
chmod -v a+wt $LFS/sources
// 从下载列表文件中下载软件包到 $LFS/sources
wget https://linux.cn/lfs/LFS-BOOK-7.7-systemd/wget-list-LFS7.7-systemd-USTC
wget --input-file=wget-list-LFS7.7-systemd-USTC --continue --directory-prefix=$LFS/sources

下载补丁

cat > wget-list-patch << "EOF"
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/bash-4.3.30-upstream_fixes-1.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/bc-1.06.95-memory_leak-1.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/bzip2-1.0.6-install_docs-1.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/coreutils-8.23-i18n-1.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/glibc-2.21-fhs-1.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/kbd-2.0.2-backspace-1.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/mpfr-3.1.2-upstream_fixes-3.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/readline-6.3-upstream_fixes-3.patch
http://www.linuxfromscratch.org/patches/lfs/7.7-systemd/systemd-219-compat-1.patch
EOF
wget --input-file=wget-list-patch --continue --directory-prefix=$LFS/sources
zqhong commented 7 years ago

第四章 最后的准备

创建 $LFS/tools 目录

mkdir -v $LFS/tools
ln -sv $LFS/tools /

添加 LFS 用户

groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
su - lfs

设置环境

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF

source ~/.bash_profile
zqhong commented 7 years ago

第五章 构建临时文件系统

zqhong commented 7 years ago

第六章 安装基本的系统软件

zqhong commented 7 years ago

第七章 基本系统配置

zqhong commented 7 years ago

第八章 让 LFS 系统可引导

zqhong commented 7 years ago

第九章 尾声

zqhong commented 7 years ago

其他

常见解压压缩命令

.tar 
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName

.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知

.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z

解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -

-----

.xz
解包:xz -d ***.tar.xz

依赖解决辅助工具:apt-file

// 安装 apt-file
sudo apt-get install apt-file
// 更新 apt-file 本地数据库
sudo apt-file update
// 搜索包含该依赖的库
sudo apt-file search XTest.h

参考:https://www.centos.bz/2013/09/ubuntu-apt-file-intro/


Linux 特殊权限位 - setuid、setgid和sticky

  1. suid:在一个程序或命令上添加 setuid 以后(u+s),这样属主有了s权限,意味着任何用户在执行此程序时,其进程的属主不再是发起者本人,而是这个程序的属主。最典型的一个例子就是passwd这个命令;

    chmod u+s /path/to/file
  2. sgid:属组有s权限,意思就是执行此程序时,此进程的属组不再是运行者本人所属的基本组,而是此程序文件的属组。Set gid权限如果给文件设置,是让运行此文件的其它用户具有这个文件的属组特性;给目录设置Set gid权限,任何用户在该目录下创建的文件,则该文件属组都和目录的属组一致。

    chmod g+s /path/to/file

3.sticky:粘滞位,附加other的权限上,表现为t。 可以添加和任意修改其他用户的文件,就是不能删除其他用户的文件,自己可以删除自己创建的文件。

chmod o+t /path/to/file

参考:http://taokey.blog.51cto.com/4633273/1329992


让切换目录更方便: pushd,popd,dirs,cd -

  1. cd -:返回上一目录
  2. dirs -v:查看目录栈详情
  3. pushd /path/to:切换目录,并将目录压入目录栈顶
  4. pushd +1:切换到编号为1的目录,并将该目录作为目录栈顶(备注:编号通过 dirs -v 查看)
  5. popd -1:将编号为1的目录从目录栈中删除
  6. dirs -c:清空目录栈

参考:http://blog.csdn.net/lhg803/article/details/4248982


update-alternatives - 更方便的在多个软件版本中切换

update-alternatives 的几个主要选项:

* install:增加一组新的系统命令链接符

// 语法:update-alternatives --install link name path priority [--slave link name path] // 添加 /bin/bash 到 sh 组,优先级为 100 $ update-alternatives --install /bin/sh sh /bin/bash 100

* remove:删除一个alternative及相关从alternative

// 语法:update-alternatives --remove name path sudo update-alternatives --remove sh /bin/dash

* config:为在现有的命令链接选择一个作为系统默认的

// 语法:update-alternatives --config name $ sudo update-alternatives --config sh There are 2 choices for the alternative sh (providing /bin/sh).

Selection Path Priority Status

Press enter to keep the current choice[*], or type selection number: 1


参考:http://persevere.iteye.com/blog/1479524

---

## 复制多个文件到一个目录

// 相当于:cp /tmp/file1 /tmp/file2 /path/to cp /tmp/{file1,file2} /path/to

// 相当于:cp /tmp/file1 /tmp/file2 /path/to cp /tmp/file{1,2} /path/to



> 这种用法同样适用于 `mv`、`rm` 等命令。

参考:
[Copying multiple specific files from one folder to another](http://askubuntu.com/questions/327282/copying-multiple-specific-files-from-one-folder-to-another)
zqhong commented 7 years ago

(chroot LFS 之后的操作)设置动态库的查找路径: export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib

zqhong commented 7 years ago

编译 Coreutils-8.23 出现错误:

GEN      man/cp.1
help2man: can't get `--help' info from man/cp.td/cp
Try `--no-discard-stderr' if option outputs to stderr
Makefile:14066: recipe for target 'man/cp.1' failed
make[2]: *** [man/cp.1] Error 127
make[2]: Leaving directory '/sources/coreutils-8.23'
Makefile:11098: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/sources/coreutils-8.23'
Makefile:5765: recipe for target 'all' failed
make: *** [all] Error 2

解决方案: 开启另一个终端,

vi /mnt/lfs/sources/coreutils-8.23/Makefile 
#找到行:
run_help2man = $(PERL) -- $(srcdir)/man/help2man 
#将上面行修改为:
run_help2man = $(PERL) -- $(srcdir)/man/help2man --no-discard-stderr

参考:http://www.lai18.com/content/6271070.html

zqhong commented 7 years ago

// 查看 CPU 个数 grep processor /proc/cpuinfo

export MAKEFLAGS='-j2'