|
|
发表于 2007-6-25 20:18:56
|
显示全部楼层
这个:
mount -vo bind /dev /media/lfslivecd/dev
应该在 tmpfs 和 devpts 之前先被挂载。
-----------------------------------------------------------
cp root.ext2 不是必须的。为什么不是必须的?请继续看:
( 我比较习惯使用 /media ,如果你不习惯可以把所有的 /media 替换成 /mnt )
挂载 iso 文件:- mkdir /media/iso
- mount -v -o loop /xxx/xxx/lfslivecd-x86-6.2-5.iso /media/iso
复制代码
当 ls -l /media/iso/ 的时候,如果是已经发现 root.ext2 大小为 1.5GB左右了,就不必再浪费硬盘空间了。- opensuse:~ # ls -l /media/iso
- total 497227
- drwxr-xr-x 3 root root 2048 Dec 18 2006 boot
- -rw-r--r-- 1 root root 1610612736 Jan 29 15:33 root.ext2
复制代码 接下来直接挂载这个 root.ext2 即可。
此处参考手册 http://cross-lfs.org/view/svn/x86/chroot/kernfs.html- mkdir /media/lfslivecd
- mount -v -o loop /media/iso/root.ext2 /media/lfslivecd
- mount -vt proc proc /media/lfslivecd/proc
- mount -vt sysfs sysfs /media/lfslivecd/sys
- mount -vo bind /dev /media/lfslivecd/dev
- mount -f -vt tmpfs tmpfs /media/lfslivecd/dev/shm
- mount -vt devpts devpts /media/lfslivecd/dev/pts #此处没有加-f 和 -o gid=4,mode=620 的参数
复制代码
现在暂不急于 chroot . 先检查一下:- ls -l /media/lfslivecd/proc
- ls -l /proc
- ls -l /media/lfslivecd/sys
- ls /sys
- ls -l /media/lfslivecd/dev
- ls -l /dev
- ls -l /media/lfslivecd/dev/shm
- ls -l /dev/shm
- ls -l /media/lfslivecd/dev/pts
- ls -l /dev/pts
复制代码
然后是:- ls /media/lfslivecd/dev/console -l
- ls /dev/console -l
- ls /media/lfslivecd/dev/null -l
- ls -l /dev/null
复制代码
通过上面的检查之后,还不要 chroot 。因为此时 root.ext2 是 read-only 的。
由于root.ext2是只读的。现在这样做:- mount -vo bind /tmp /media/lfslivecd/tmp
复制代码 还是检查一下:- ls -l /media/lfslivecd/tmp
- ls -l /tmp
复制代码
lfslivecd.iso 中自带了一个用户 jhalfs 。他的home目录是/home/jhalfs- cat /media/lfslivecd/etc/passwd | grep jhalfs
复制代码 屏幕上显示:
jhalfs:x:101:101:jhalfs:/home/jhalfs:/bin/bash- ls -la /media/lfslivecd/home/jhalfs
复制代码
可以使用lfslivecd.iso中的这个自带的用户来做lfs或者clfs,所以用户也不用我们自己建了。以后手册中的 su - lfs 这样的操作就可以改为 su - jhalfs
先在主系统中建一个目录,然后用 mount --bind /xxx/xxx /zzz/zzz 的办法将主系统中的目录挂载到lfslivecd中。请放心,由于lfslivecd是只读的,这样的操作不会改写lfslivecd.iso的内容。- mkdir -v /home/jhalfs
- mount -v --bind /home/jhalfs /media/lfslivecd/home/jhalfs
复制代码
再检查:- ls -la /home/jhalfs
- ls -la /media/lfslivecd/home/jhalfs
复制代码
以后把手册上的 /tools 就改为 /tmp/tools . CLFS 的还有 /cross-tools 这个链接文件。 因为,这个/tmp 是主系统的,可以写入。
补充:这里也可以把主系统中的 /mnt 目录挂载到 livecd 中的 mnt 目录:- mount -v --bind /mnt /media/lfslivecd/mnt
复制代码
进入lfslivecd开发环境:- chroot /media/lfslivecd
- whoami
- who
- w
- cat /etc/issue
- df /
- df ./
复制代码 然后,转到 /tmp 目录。这个目录是可写的。
在chroot环境中改 /home/jhalfs 属主(组)为 jhalfs:jhalfs- chown jhalfs:jhalfs /home/jhalfs
复制代码
然后检查一下开发环境:- 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
- make --version | head -n1
- patch --version | head -n1
- sed --version | head -n1
- tar --version | head -n1
- EOF
- bash version-check.sh
复制代码
现在检查内核版本信息(从主系统挂载的)
这里需要注意一下。如果主系统是32位的,不可以编译x86_64或者Pure64。
之后,可以按照手册来做了。注意,在chroot环境中的 /tmp 和 /home/jhalfs 都是从主系统中挂载的,是可写的。
所有的 /tools 全 改为 /tmp/tools
这样,很多地方就不能再使用复制粘贴的办法了。对于想熟练命令的朋友可一试。
当然,如果想偷懒,仍然还是有办法的。
还有需要注意的是,不要在 chroot 环境中使用关机或者重启机器的命令。 |
|