-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathINSTALL.html
More file actions
203 lines (202 loc) · 13.5 KB
/
INSTALL.html
File metadata and controls
203 lines (202 loc) · 13.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>INSTALL.md</title></head>
<body><h1>树莓派操作系统彻底定制</h1>
<h2>一、为什么要用树莓派</h2>
<p> 文章名字由来于网上有人对LFS项目的翻译,虽然感觉没有体现LFS的含义,但如果取《在树莓派进行LFS》这样的类似名字,估计很多人都不明白什么意思。所以先来科普一下什么是LFS。Linux From Scratch项目简称LFS,它提供具体的步骤、特定的补丁、必须的脚本,从而提供一个简便的创建Linux发行版的途径。简单来说提供了一个自己从网上下载所有源代码编译一个linux完整系统的指南。<br/>
为什么要在树莓派上编译?首先是学习,当然如果在pc机上LFS也一样可以通过LFS学习linux,但我没有在裸机上安装linux,如果运行虚拟机的话估计速读比树莓派也快不了多少。而且手头有树莓派啊,LFS需要长时间开机,树莓派可以安静的工作没有任何噪音困扰,你可以用你的pc做其它事情,这样多惬意。再有我在预装了树莓派的raspbian系统后感觉启动很慢,系统预装了很多我不需要的东西占用了大量的内存和TF卡空间,如果我想用树莓派做一个固定的用处,比如BT下载机,或者摄像机之类的,当然需要一个小巧,启动迅速的系统,所以需要定制。最后,我想我是喜欢树莓派吧。<br/>
在我刚开始想用树莓派进行LFS时,感觉是一项大工程,因为以前我用pc参照LFS手册进行LFS,感觉这是一项复杂和需要勇气的工作,而且对于是否可以在树莓派上进行LFS实在心里没底。直到我在网上找到了一个网站<a href='http://www.intestinate.com/pilfs/' target='_blank' >http://www.intestinate.com/pilfs/</a>,知道国外有人已经进行了尝试并且编制了相关的脚本,沿着前人的步伐,我发现在树莓派上进行LFS不是一项困难的工作,甚至感觉so easy。我借用了pilfs网站的脚本,在此十分感谢pilfs网站的帮助。</p>
<h2>二、前提条件</h2>
<p> 需要一个树莓派及电源、键盘、鼠标、TF卡(16G)、U盘等附件,大概这是废话了,另外根据我的经历,在pi1上做LFS那是一件极其痛苦的事情(第一阶段需要50小时左右),所以建议在pi3上完成LFS,pi2是否可以我没测试过。
一台可以上网的pc。pc作为辅助功能必不可少,有很多事情需要在电脑上完成。另外我在运行LFS时是通过pc联机到树莓派,这样可以记录下所有屏幕日志方便查看编译过程是否有问题。
除了以上两点,你必须还要有足够的耐心和基本的linux知识。</p>
<h2>三、准备工作</h2>
<p> 首先你应该阅读LFS手册,这是你学习linux知识的绝佳机会,LFS官方网站<a href='http://www.linuxfromscratch.org/' target='_blank' >http://www.linuxfromscratch.org/</a>。目前有人已经对LFS手册进行了翻译,建议参考: </p>
<ol><li>
<a href='http://www.jinbuguo.com/' target='_blank' >http://www.jinbuguo.com/</a> 6.2版本非systemd版本</li>
<li>
中文参考文档version 7.7-systemd systemd版本下载:<a href='https://linux.cn/article-5797-rss.html' target='_blank' >https://linux.cn/article-5797-rss.html</a> 开源中文社区<a href='https://linux.cn/' target='_blank' >https://linux.cn/</a></li>
<li>
你同时也可以浏览一下pilfs网站的guide,该网站所指定的LFS指南在线版本<a href='http://www.linuxfromscratch.org/lfs/view/development/index.html' target='_blank' >http://www.linuxfromscratch.org/lfs/view/development/index.html</a></li>
</ol>
<h3>环境准备:</h3>
<ol><li>
<p>安装raspbain</p>
<p> 需要一张16G的TF卡作为LFS的环境,但先需要安装raspbain操作系统,我安装的版本是2016-05-10-raspbian-jessie,网上可以下载zip文件(或者我的百度云盘),然后解压之后是一个img文件。你可以用Win32DiskImager工具软件将img文件写入tf卡。有一个小问题,如果是用hdmi转vga的,可能无法正常显示,需要在写入img文件之后,用pc机插入tf卡,在boot分区的config.txt文件加上:</p>
<pre>
hdmi_force_hotplug=1
config_hdmi_boost=4
hdmi_group=2
hdmi_mode=9
hdmi_drive=2
hdmi_ignore_edid=0xa5000080
</pre>
<p>最后试试启动树莓派是否正常。</p>
</li>
<li>
<p>通过PUTTY联机树莓派<br/></p>
<p> 在pc机上安装putty软件。但是如何联机树莓派?我是用360wifi将pc作为一个ap热点,然后用树莓派去联接pc,这样的好处是不用任何开销而且设置简单,而且树莓派可以通过pc访问互联网,事实证明也很稳定。当然你也可以将树莓派直接联上可以上网的ap。当设置树莓派联上pc之后,启动putty试试是否正常,如果能正确联机,那么恭喜你已经迈出LFS的一小步了。此时可以配置树莓派启动到命令行就可以了(LFS过程不需要启动xwindow,这样可以节约宝贵的RAM空间,别告诉我你不会设置,请教度娘吧)另外别忘了设置putty将任何屏幕输出记录下来(putty软件的session/logging中All session output选项)。</p>
<p>3、下载LFS需要的软件包
我已经整理好了LFS所有需要的软件包,请到我的百度云盘下载(见附录)。将lfs_reselse下的sources全部下载下来,并复制到一个u盘上备用。将几个脚本文件从git服务器上下载下来,并拷贝到sources目录。</p>
</li>
</ol>
<h2>四、开始LFS</h2>
<p>好了,一切准备工作就绪,现在可以正式开始LFS了。</p>
<ol><li>
<p>创建目录和用户</p>
<p> 启动树莓派,用putty联上,用root登录。先查看一下时间是否正确(date命令),在编译时时间非常重要,如果时间不对执行date –s 11/30/16(重要!)设置时间。
更新raspbain,确保树莓派能访问外网,有4个软件包需要更新:</p>
<pre>
sudo su
apt-get update
apt-get install bison gawk m4 texinfo
</pre>
</li>
<li>
<p>建立相关目录</p>
<pre>
mkdir -pv /lfs;-p如果目录存在不报错
mkdir –v /lfs/sources
chmod -v a+wt /lfs/sources
mkdir -v /lfs/tools
ln -sv /lfs/tools / ;在根目录下建立链接
;增加交换文件
dd if=/dev/zero of=/swapfile bs=1M count=512
mkswap /swapfile
swapon -v /swapfile
</pre>
<p> 将u盘插入树莓派,将sources到/lfs/</p>
<pre>
mount /dev/sda1 /mnt
cp -R /mnt/sources/* /lfs/sources
</pre>
</li>
<li>
<p>添加lfs用户</p>
<pre>
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
export LFS=/lfs
</pre>
</li>
<li>
<p>执行脚本ch5-build.sh</p>
<p>   以lfs用户执行4<em>4</em>set_env.sh,执行完之后退出lfs用户重新登录。确认一下环境变量$LFS(/mnt/lfs)和$LFS_TGT(armv7l-lfs-linux-gnueabihf)正确。</p>
<pre>
cd /lfs/sources
./4_4_set_env.sh
exit
su - lfs
cd /lfs/sources
./ch5-build.sh
</pre>
<p> 此过程大概有8个小时(树莓派1大概需要50小时,另外建议树莓派1在config.txt文件在加上gpu_mem=16,以最大化memory)。在结束之后,可以通过查看putty的截屏查看是否有错误。如果顺利通过,那么应该说已经成功了一大半了,后面的步骤应该不会遇到大的问题。编译完成的软件安装在/tools目录下,修改文件属性,以root用户执行:</p>
<pre>
exit
chown -R root:root /lfs/tools
</pre>
</li>
<li>
<p>进入chroot</p>
<p>   以下开始已root身份执行命令,执行s6.2.sh 确认一下/mnt/lfs/dev/consul ,/mnt/lfs/dev/null是否生成</p>
<pre>
export LFS=/lfs
cd /lfs/sources
./s6.2.sh
./S6.4_chroot.sh
</pre>
<p> 进入chroot(bash s.6.4_chroot.sh),但需要root用户执行,否则失败。下面命令如果机器重启之后要先执行s6.2r.sh在chroot。</p>
</li>
<li>
<p>执行脚本ch6-build.sh
  先执行s6.5_6.sh(生成相关目录、passwd、group文件)</p>
<pre>
cd /sources
./s6.5_6.sh
exec /tools/bin/bash --login +h
touch /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664 /var/log/lastlog
chmod -v 600 /var/log/btmp
./ch6-build.sh
</pre>
<p> ch6-binuld.sh脚本大概执行有5个小时(在树莓派1上大概需要38小时)。最后有3个问题,这三个问题如果选择YES,则脚本会执行:</p>
<p>   1, cp -rv /sources/firmware-master/hardfp/opt/vc /opt </p>
<p>   2, cp -rv /sources/firmware-master/modules /lib </p>
<p>   3, mount /dev/mmcblk0p1 /boot && cp -rv /sources/firmware-master/boot / && umount /boot; </p>
<p>   特别是第三步,会覆盖了原来tf卡上的启动文件,重新启动会以新的内核启动,建议原来的boot分区文件备份一份,以防止无法启动时在pc上重新复制。</p>
</li>
<li>
<p>清除无用内容及基本配置信息</p>
<p>   清除调试信息及/tools目录,此时/tools目录已经不需要可以删除。当然如果你想再次LFS,可以备份/tools目录,这样下次第一阶段(ch5-binuld.sh)就不需要执行了。</p>
<pre>
logout
cd /lfs/sources
./s6.71_chroot.sh
/tools/bin/find /{,usr/}{bin,lib,sbin} -type f -exec /tools/bin/strip --strip-debug '{}' ';'
rm -rf /tmp/*
rm -rf /tools
cd /sources
./s7.2_9.sh
cp fstab /etc
cd /
rm -rf /sources
</pre>
<p> 完成之后可以执行bash /lib/udev/init-net-rules.sh看是否正确,mount一下/sys是否已经mount。从现在开始如果重启了树莓派,进入chroot 环境执行(以root用户,别忘了sources目录还没删除的时候可以执行):</p>
<pre>
export LFS=/lfs
s6.2r.sh
s6.71_crhoor
</pre>
</li>
<li>
<p>准备启动</p>
<p> 如果你已经走到这里的,那么应该恭喜你已经完成了LFS的99%,离完成LFS就差一步之遥了。下面的操作会删除原来的系统只保留编译出来的lfs目录,如果你怕误操作破坏tf卡上的内容,可以先备份一下(可以用Win32DiskImager,或者tar命令)。
以下步骤需要将TF卡取下,使用另外的linux系统进行操作。如果你有另外的树莓派系统盘,这时候可以插入另外一张TF卡启动树莓派,将编译有LFS那张TF卡用一个读卡器接入树莓派,然后执行:</p>
<pre>
mount /dev/sda2 /mnt
cd /mnt
shopt -s extglob
rm -rf !(lfs)
mv /mnt/lfs/* /mnt
</pre>
<p>   如果在执行ch6-binuld.sh之后的第三个问题你回答了YES,那么这整个LFS已经完成了,你可以umount之后插入这张完成的TF卡试试启动(如果有HDMI转VGA,同样别忘了修改config.txt)。如果之前没有覆盖boot文件,可以将下载到的boot目录通过u盘复制到boot分区,命令参考如下:</p>
<pre>
mkdir /mnt/lfs
mkdir /mnt/tmp
mount /dev/sda1 /mnt/lfs
mount /dev/sdb1 /mnt/tmp
cp –R /mnt/tmp/sources/boot_lfs/* /mnt/lfs
umount /mnt/tmp
umount /mnt/lfs
</pre>
</li>
</ol>
<h2>结束语</h2>
<p> 到这里,恭喜你的定制树莓派操作系统完成了,系统预安装的软件参考LFS手册或者ch6-build.sh脚本。不过我故意遗留了一个问题,如何将此系统做成一个镜像文件?当然你可以用Win32DiskImager制作,但这样做出来的镜像文件大小是和你的TF卡容量一样大小的,而且以我的经历,16G的镜像文件要恢复还不是一件容易成功的事情。大家可以到pilfs网站上去查查制作一个1G镜像文件的方法。另外还有一个问题,就算1G镜像文件完成了,如果在一张TF卡上恢复了,恢复后的系统大小也是1G的,需要手工扩展分区到TF卡原来的大小,如何做?欢迎和我交流。</p>
<h2>附录</h2>
<p>本文相关文件的下载链接:</p>
<p>1,关于我的百度云盘。 我没有合适的地方可以免费上传大文件,只能存放在百度云盘。
链接是<a href='https://pan.baidu.com/s/1mhVb9NE' target='_blank' >https://pan.baidu.com/s/1mhVb9NE</a></p>
<p>pilfs_orig_rpi3_20161226.tar.gz是已经编译好的lfs,是一个镜像文件,但恢复之后只有1g大小,需要resize。</p>
<p>pilfs_orig_rpi1_20161230.tar.gz是已经编译好的lfs,是一个镜像文件,但恢复之后只有1g大小,需要resize。</p>
<p>pilfs_tools_rpi3_20161220.tar.gz是编译的tools目录(基于rpi3),这样可以不用执行ch5-build.sh,直接进入第二遍编译</p>
<p>pilfs_tools_rpi1_20161220.tar.gz是编译的tools目录(基于rpi1),这样可以不用执行ch5-build.sh,直接进入第二遍编译</p>
<p>2016-05-10-raspbian-jessie.zip是raspbian树莓派操作系统</p>
<p>sources目录 所以编译使用的源代码软件包</p>
<p>2,关于自己的脚本及本手册
本手册和脚本作为github的一个项目,放在github.com/breezecloud/myPiLFS,可以使用
git clone git://github.com/breezecloud/myPiLFS下载,也可以直接用浏览器<a href='https://github.com/breezecloud/myPiLFS' target='_blank' >https://github.com/breezecloud/myPiLFS</a></p>
<p>3,关于我
喜欢折腾,财力有限;年纪不小,空闲不多;爱好甚广,精通寥寥。
邮箱:<a href='mailto://luping@shtel.com.cn' target='_blank' >luping@shtel.com.cn</a>或者<a href='mailto://luping@189.cn' target='_blank' >luping@189.cn</a>欢迎交流
欢迎加入我的个人公众号,本人以后所有的原创文章均会发布在此公众号,公众号可以通过搜索electronic_computer加入,或者扫描二维码加入。</p>
<p></p>
</body>
</html>