Skip navigation.

419

The only way to learn a new programming language is by writing programs in it.

Posts tagged with "LFS"

我爱折腾,我用LFS

,

CLFS-Multilib装好了!还装上了pppoe和lynx和wget,现在可以在新系统上英文网站和下载东西了。

其实我不是太喜欢折腾,我用LFS的目的正是不用折腾,当我对编译系统的步骤越来越熟悉,我就可以用ALFS自动安装了。

但要达到不折腾的目的还需要先折腾很长一段时间。

BLFS 失败

想装xorg7.2,弄了很久,实在是烦透了。入手新机器前不使用编译型的distro。

chroot + livecd = 硬盘安装LFS

,

用livecd安装LFS的一大好处就是成功率比较高,这点对于新手尤其重要。
硬盘安装的好处有很多,这里就不多说了。

论坛精华区有一篇帖子介绍了“把livecd安装在硬盘上”的方法[http://www.linuxsir.org/bbs/showthread.php?t=274629],可惜我多番尝试都不成功,更改init.c再重新编译重新打包对我来说太难了。

不过我由此得到了提示,再参考livecd的/root目录里的那篇lfscd-remastering-howto.txt,
摸索出了一个比较容易操作的方法。现在不使用光驱,不重启电脑,就可以利用光驱里的环境来编译安装LFS了。

我下载了lfslivecd-x86-6.2-5.iso,然后

mkdir /mnt/isolfs
mount -o loop lfslivecd-x86-6.2-5.iso /mnt/isolfs
mkdir /mnt/lfslivecd
export WORK=/mnt/lfslivecd
cp /mnt/isolfs/root.ext2 $WORK/root.ext2

这时请查看 $WORK/root.ext2 是不是1.5G,如果不是,请参考lfscd-remastering-howto.txt[http://wiki.linuxfromscratch.org/livecd/browser/branches/6.2/doc/lfscd-remastering-howto.txt?rev=1744]里的办法,得到这个1.5G的文件,然后继续。

mkdir $WORK/root
mount -o loop $WORK/root.ext2 $WORK/root

mount -t proc proc $WORK/root/proc
mount -t sysfs sysfs $WORK/root/sys
mount -t devpts devpts $WORK/root/dev/pts
mount -t tmpfs tmpfs $WORK/root/dev/shm

mount -o bind /dev $WORK/root/dev    #这句是安装gentoo时学到的。

一切准备就绪,可以chroot了。

chroot /mnt/lfslivecd/root

现在测试一下这个工作环境是否理想,运行以下命令:
cat > version-check.sh << "EOF"
#!/bin/bash

# Simple script to list version numbers of critical development tools

bash --version | head -n1 | cut -d" " -f2-4
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-4
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
gcc --version | head -n1
/lib/libc.so.6 | head -n1 | cut -d" " -f1-7
grep --version | head -n1
gzip --version | head -n1
cat /proc/version | head -n1 | cut -d" " -f1-3,5-7
make --version | head -n1
patch --version | head -n1
sed --version | head -n1
tar --version | head -n1

EOF

bash version-check.sh


如果你也使用livecd-x86-6.2-5.iso,将会得到以下结果:
bash, version 3.1.17(1)-release
Binutils: version 2.16.1
bzip2,  Version 1.0.3, 15-Feb-2005.
Coreutils:  5.96
diff (GNU diffutils) 2.8.1
GNU find version 4.2.27
GNU Awk 3.1.5
gcc (GCC) 4.0.3
GNU C Library stable release version 2.3.6,
grep (GNU grep) 2.5.1
gzip 1.3.5
Linux version 2.6.18-3-686 2.6.18-7) (waldi@debian.org) (gcc
GNU Make 3.80
patch 2.5.4
GNU sed version 4.1.5
tar (GNU tar) 1.15.1


可见,得到了一个很适合安装LFS的宿主环境。Have fun!

*********************

补充一点,我在这个环境里根据/root/README的说明来设置,可以用startx进xfce里上网。但我还没有正式在里面安装LFS,所以虽然现在一切看起来很好,但并不完全确定安装过程中会有什么情况发生。

另外,我有一个疑问,

mount -t sysfs sysfs $WORK/root/sys
mount -t devpts devpts $WORK/root/dev/pts
mount -t tmpfs tmpfs $WORK/root/dev/shm

这几句我是按照lfscd-remastering-howto.txt来写的,不知道具体有什么用处。高手可以讲解一下吗?谢谢!

提取LFS LiveCD里的源码

,

下载一张LFS的LiveCD对安装LFS很有好处。[http://www.linuxfromscratch.org/livecd/

其中一个好处就是不用一个一个地下载源码,liveCD里已经包含了所需要的全部源码和patch。

本文参考LFS的hints里的方法[http://www.linuxfromscratch.org/hints/downloads/files/lfscd-remastering-howto.txt],提取LiveCD里的源文件。


#mkdir /mnt/isofile
#mount -o loop lfslivecd-x86-6.2-5.iso /mnt/isofile
#mkdir /mnt/lfslivecd
#mount -o loop /mnt/isofile/root.ext2 /mnt/lfslivecd

这样就可以了,现在 /mnt/lfslivecd 里有一个文件夹 /mnt/lfslivecd/lfs-sources,里面就是全部源码和patch。

在debian下安装gentoo(二)

, ,

由于安装过程中关机了,现在要重新回到安装gentoo的状态,先要执行以下命令。
#hdparm -d 1 -c 3 -m 16 -u 1 -a 1024 /dev/hda
#mount /dev/hda8 /mnt/gentoo
#mount /dev/hda6 /mnt/gentoo/boot
#cd /mnt/gentoo
#mount -t proc none /mnt/gentoo/proc
#mount -o bind /dev /mnt/gentoo/dev
#chroot /mnt/gentoo/ /bin/bash
#env-update
#source /etc/profile
#export PS1="(chroot) $PS1"

现在可以继续安装了。我现在比较喜欢用vim,但由于在chroot环境下还没有装vim,所以我先 emerge vim。

第六步,编辑 /etc/make.conf 的USE。
查看有哪些USE可以用。
#less /usr/portage/profiles/use.desc
我对USE不太理解,我现在只用
USE="unicode alsa"

第七步,Locale与时区。

建立你需要的Locales,先修改/etc/locale.gen,我的如下。
#cat /etc/locale.gen

en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN GBK

然后
#locale-gen

更改时区,先
#ls /usr/share/zoneinfo
找到适合自己的时区,我用香港的时区,然后把它复制到 /etc/localtime
#cp /usr/share/zoneinfo/Hong_Kong /etc/localtime

第八步,终于可以开始编译内核了。
可以参考这几篇文章[http://gentoo-wiki.com/HOWTO_Compile_a_Kernel_Manually
Linux Kernel 2.6完全配置详解[http://feelyoung.xmu.edu.cn/home/wxd/kernel/
Linux 2.6.19.x 内核编译配置选项简介[http://lamp.linux.gov.cn/Linux/kernel_options.html

下载内核源码:
#emerge gentoo-sources
在非chroot终端下用下面的命令可以帮助了解硬件。
#lshw
#lspci
#lsmod
进入配置内核的菜单:
#cd /usr/src/linux
#make menuconfig

配置过程中在选项上按<Alt+?>可以看到相关说明。如果你像我一样没有什么编译内核的经验,将会花上很长时间来配置内核,比如说我就用了三个小时左右,估计以后使用时有问题还要重新编译。

终于配置好了,可以编译了:
#make && make modules_install

内核很快就编好了,把它复制到 /boot里
#cp arch/i386/boot/bzImage /boot/kernel-2.6.19-gentoo-r5

然后找一下有哪些模块:
# find /lib/modules/2.6.17-r5/ -type f -iname '*.o' -or -iname '*.ko'

把找到的模块名字写到 /etc/modules.autoload.d/kernel-2.6 里。

至此,内核的编译就到一段落了。

这时我看到了一个坏消息[http://www.linuxsir.org/bbs/showthread.php?t=294699],让我对gentoo有了不好的印象,忽然没有了使用gentoo的热情。也许我转向会尝试LFS。