LFS7.7-systemd on openEulers实验报告
一. 实验介绍
本次课程将“如何构建一个自己的Linux操作系统”的津要和盘托出,依托专门撰写的“构建脚本”,足以让我们能够顺利地完成构建LFS系统的基础工作。
二. 虚拟机的安装方式
- 下载Virtualbox或者vmvare软件,以vmvare为例;
- 下载要安装的操作系统如openEuler20.09的iso镜像;
- 在vmvare上创建虚拟机;
- 调整虚拟机参数,主要是内存大小,处理器数量,硬盘大小;
- 将openEuler镜像安装到光驱;
- 启动虚拟机,傻瓜式安装;
三. 从社区获取资料
- LFS官网:https://www.linuxfromscratch.org/lfs/
- openEuler社区:https://openeuler.org/
- build-lfs7.7systemd.sh 构建脚本
四. LFS系统的构建
linux操作系统的基本操作
- 安装工具
yum group install -y "Development Tools"
yum install -y bc
yum install -y openssl-devel
yum install -y texinfo # for makeinfo
yum install -y vim
- 关于分区
lsblk,blkid #显示硬盘分区信息
fdisk #对硬盘进行分区操作
mkfs -v -t ext4 /dev/sdb1 #格式化
- 关于ip
ip a | grep 192.168
- 基本操作
scp -r root@192.168.56.102:~/opc/lfs-course/ ./
linux操作系统的基本架构和实现原理
- 准备构建LFS系统所需的包和补丁
lfs-packages-7.7-systemd.tar
- 创建并以lfs用户编译临时工具链
- /mnt/lfs及lfs用户
1. 设置了$LFS环境变量
2. 在宿主机上创建相应文件夹
3. 将LFS系统将要编译和安装到的那个盘挂载进来
4. 创建lfs用户
-
L
F
S
/
s
o
u
r
c
e
s
和
LFS/sources 和
LFS/sources和LFS/tools文件夹
- 构建LFS系统需要的包从本地拷贝到/mnt/lfs
- 这个包将会以lfs用户解压到$LFS/sources
- 另外请注意临时工具链都会安装到$LFS/tools
- 用编译指南
- 以lfs用户解压要编译的软件包
- 进入到解压后创建的目录中
- 根据指南说明编译软件包
- 回退到源文件目录
- 除非特别说明,删除解压出来的目录
- 对于gcc-4.9.2编译过程中的一个问题,非官方解决方案安装一个补丁
- 注意几次chmod和chown的作用
- 在chrooted环境下构建真正的LFS目标系统
- mount & chroot
和LFS-BOOK不同的是,我们允许您不断地重启宿主机系统,这在“构建脚本”中多次重启的命令也可以看出来。但在此节每次重启系统后,需要重新mount和chroot。为了可以在宿主机reboot后接着进行LFS系统的构建工作,建议将每次root登录进来之后的mount和chroot写成脚本
- 通用编译指南
- 进入chroot环境后解压要编译的软件包
- 进入到解压后创建的目录中
- 根据指南说明编译软件包
- 回退到源文件目录
- 除非特别说明,删除解压出来的目录
- 第二个版本的chroot
完成本节的编译安装工作后,由于不再需要/tools目录,在以后的任务中可以修改mount和chroot命令
- 配置LFS目标系统
本节为LFS系统进行网络、主机名、/etc/hosts文件的设置,其余的配置可以忽略。
- 编译并安装内核
本节进行内核的编译和安装。需要注意的是
make menu config
这一步,除LFS-BOOK中所提到的那些配置选项外,需要选择和虚拟机提供的硬件相匹配的驱动(特别是硬盘的驱动),否则以后启动新系统时系统将会mount不上sdb。
- 设置GRUB使新系统可引导
- LFS系统GRUB设置
LFS系统(即目前的chrooted环境)可以按以下命令生成grub.cfg文件:
grub-install /dev/sdb
grub-mkconfig -o /boot/grub/grub.cfg
- 宿主机GRUB设置
对于宿主机的GRUB设置,将LFS系统的grub.cfg中menuentry模块复制到宿主机/boot/grub2/grub.cfg中的相应位置即可。
- 进入新系统
重启系统,会出现LFS系统的选择项,移动键盘的上下键选中它,按回车键进入,以root用户登录,输入LFS-BOOK 6.25.3. Setting the root password节设置的密码。
五. 作业的提交
- 注册gitee账户
- 获取lfs-course的仓库地址
- 从git仓库获取资料
- Git的初始设置
git config --global user.name "your-user-name"
git config --global user.email "your-email-address-on-gitee"
- 克隆lfs-course仓库
mkdir ~/openEuler
cd ~/openEuler
git clone https://gitee.com/openeuler-practice-courses/lfs-course
cd lfs-course/
ls
LICENSE README.en.md README.md lfs-7.7-systemd/
4.提交作业
- 进入openEuler创新实践课官方代码仓
- 选择自己学校的代码仓进入
- 该页面上找到Fork按钮并fork之
- 先在gitee页面上拷贝仓库地址
- 在git命令窗口clone自己fork的仓库并进入仓库目录
- 新增上游远程分支
git remote add upstream https://gitee.com/openeuler-practice-courses/nankai_university_2021.git
git pull upstream
- 创建自己仓库的开发分支
git checkout -b zhaoyan upstream/master
git branch
- 同步上游代码
git pull --rebase
- 在自己的仓库下建立文件夹
mkdir 12306-zhaoyan
- 将自己的作业截图放到该文件夹下
- 增加此图片到仓库中
git add 12306-zhaoyan
git add 12306-zhaoyan /12306-zhaoyan.png
git status
- 提交至本地仓库
git commit -m "Push 12306-zhaoyan’s homework"
git status
- Push代码到自己的远程仓库
git push origin zhaoyan
git log
- 到gitee网页查看自己的远程仓库
- 进行“Pull Requests”操作
- 首次需签署个人CLA
- 在原始远程仓检查提交情况
六. 实验总结
- 这次实验主要是对心态的考验,这次实验前期的一个问题是虚拟机的安装,下载的vmvare者virtualbox可能会报错,需要重装或者修改网卡连接方式。我在实验过程中发现自己所用的openEuler版本不兼容导致报错,最后解决了这个问题。
- 还有一个就是在对照bash文件进行粘贴的时候需要注意其中reboot命令处会被打断,为了方便复制粘贴,可以使用SSH连接。
- 实验过程中可能会报错,并且很难找到错误的原因,这个时候一方面需要有足够的耐心,另一方面还要有从头再来的勇气,当然,为了不要真的“从头”再来,不时地拍个快照是个不错的习惯。