|
[color="Magenta"]属于原创作品,如果转载,请注明出处和作者(springwind@bhu.edu.cn)
[color="Blue"]
内核配置文件和busybox的配置文件,以及squashfs的补丁在附件中
LFS部分是参考LFS-6.3rc1来进行的,需要特别修改的地方已经标明在下面
全程制作过程见附件livecd.sh.gz
[color="Magenta"]glibc-2.5
[color="Red"]安装locale部分,使用自定义方式,只安装下面我需要的locale
- mkdir -pv /usr/lib/locale
- localedef -i en_US -f ISO-8859-1 en_US
- localedef -i en_US -f UTF-8 en_US.UTF-8
- localedef -i zh_CN -f GB2312 zh_CN
- localedef -i zh_CN -f GBK zh_CN.GBK
- localedef -i zh_CN -f GB18030 zh_CN.GB18030
- localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
复制代码
[color="Red"]按照晨想版主的建议,使用PRC
- cp -v --remove-destination /usr/share/zoneinfo/PRC /etc/localtime
复制代码
[color="Magenta"]第八章
- mv -v /etc/udev/rules.d/{75-cd-aliases-generator.rules,../}
- mv -v /etc/udev/rules.d/{75-persistent-net-generator.rules,../}
- rm -v /etc/udev/rules.d/70-persistent-cd.rules
- cat >/etc/udev/rules.d/81-cdrom.rules <<"EOF"
- # /etc/udev/rules.d/81-cdrom.rules: Set CD-ROM permissions.
- ACTION=="add", SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", PROGRAM="getcdrom %k", SYMLINK+="cdrom%c", GROUP="cdrom"
- EOF
- cat >/lib/udev/getcdrom <<"EOF"
- #!/bin/sh
- i=0
- while [ -e /dev/cdrom${i} ]
- do
- [ X$(realpath /dev/cdrom${i}) == X/dev/$1 ] && break
- let i=i+1
- done
- echo $i
- exit 0
- EOF
- chmod 755 /lib/udev/getcdrom
复制代码
[color="Magenta"]解释:
[color="Red"]
1、75-cd-aliases-generator.rules
75-persistent-net-generator.rules
的作用是创建一些静态的规则(写文件),在livecd上没有意义,在liveUSB上,会引起问题(因为每台机器的网卡的MAC都不同,直接导致的后果是每在一台新的机器上运行后,网卡的编号是递增的,比如在A机上启动后,网卡的名字是eth0,可是,到另外一台机器上启动后,网卡是eth1,....,另外,CDROM的名字也有这样的情况发生)
2、修改81-cdrom.rules,作用是在/dev目录下创建cdrom?这样的符号连接,链接到实际的光驱上面,第一个光驱是cdrom0,第二个是cdrom1,依次类推(/lib/udev/getcdrom是一个shell脚本,目的就是获取某个光驱的编号,返回值从0开始)
- cat > /etc/sysconfig/clock << "EOF"
- # Begin /etc/sysconfig/clock
- UTC=0
- # End /etc/sysconfig/clock
- EOF
复制代码
[color="Magenta"]解释:
[color="Red"]
设置UTC=0,就是使用本地时间,否则看起来别扭,总是差8个小时
- echo "HOSTNAME=livecd" > /etc/sysconfig/network
- cd /etc/sysconfig/network-devices
- mkdir -v ifconfig.eth0
- cat > ifconfig.eth0/ipv4 << "EOF"
- ONBOOT=yes
- SERVICE=ipv4-static
- IP=192.168.1.1
- GATEWAY=192.168.1.2
- PREFIX=24
- BROADCAST=192.168.1.255
- EOF
- cat > /etc/resolv.conf << "EOF"
- # Begin /etc/resolv.conf
- #domain <Your Domain Name>
- nameserver 202.96.64.68
- nameserver 202.96.69.38
- # End /etc/resolv.conf
- EOF
- cat > /etc/fstab << "EOF"
- # Begin /etc/fstab
- # file system mount-point type options dump fsck
- # order
- #/dev/<xxx> / <fff> defaults 1 1
- #/dev/<yyy> swap swap pri=1 0 0
- proc /proc proc defaults 0 0
- sysfs /sys sysfs defaults 0 0
- devpts /dev/pts devpts gid=4,mode=620 0 0
- shm /dev/shm tmpfs defaults 0 0
- # End /etc/fstab
- EOF
复制代码
[color="Magenta"]解释:
[color="Red"]
1、设置机器名字为livecd
2、使用静态IP
3、DNS服务器是我使用的,这个需要按照实际情况改动
4、因为是用于liveCD或者liveUSB,因此,在/etc/fstab中是没有/和swap的,因此不需要写
[color="Magenta"]内核编译部分
- wget http://nchc.dl.sourceforge.net/sourceforge/squashfs/squashfs3.2-r2.tar.gz
- tar xf squashfs3.2-r2.tar.gz
- cd linux-2.6.22.1
- patch -Np1 -i ../squashfs3.2-r2/kernel-patches/linux-2.6.20/squashfs3.2-patch
- cd /sources/squashfs3.2-r2/squashfs-tools
- make
- cd /sources/linux-2.6.22.1
- patch -Np1 -i ../linux-2.6.22.1-squashfs.patch
- make
- make modules_install
- cp -v arch/i386/boot/bzImage /boot/vmlinuz-2.6.22.1
- cp -v System.map /boot/System.map-2.6.22.1
- cp -v .config /boot/config-2.6.22.1
- cd /sources/aufs
- make KDIR=/lib/modules/2.6.22.1/build/ -f local.mk
- install -m 500 -p mount.aufs umount.aufs auplink aulchown /sbin
- echo FLUSH=ALL > /etc/default/auplink
- mkdir /lib/modules/2.6.22.1/kernel/fs/aufs
- cp aufs.ko /lib/modules/2.6.22.1/kernel/fs/aufs/
- depmod -a 2.6.22.1
- echo 6.3-rc1 > /etc/lfs-release
- #mkinitrd
- cd /sources
- tar xf busybox-1.5.1.tar.bz2
- cd busybox-1.5.1
- make defconfig
- make
- mkdir /initrd
- cd /initrd
- mkdir bin dev etc lib mnt/{,cdrom,root,roroot,rwroot} proc root sbin sys tmp
- chmod 1777 tmp
- cp /sbin/{modinfo,udevd,udevtrigger,depmod,modprobe,udevcontrol,udevsettle} sbin/
- cp -a /sources/busybox-1.5.1/_install/{bin,sbin} .
- cp -a /etc/udev etc/
- cp -a /lib/udev lib/
- cp -a /lib/{ld-linux.so.2,libc.so.6,libvolume_id.so.0,libvolum_id.so.0.78.0} lib/
- mkdir -p lib/modules/2.6.22.1/kernel/{drivers,fs}
- cp -a /lib/modules/2.6.22.1/kernel/drivers/{ata,block,cdrom,hid,ide,input,pcmia,scsi,usb} lib/modules/2.6.22.1/kernel/drivers/
- cp -a /lib/modules/2.6.22.1/kernel/fs lib/modules/2.6.22.1/kernel/
- cat >init <<"EOF"
- #!/bin/sh
- PATH=/bin:/sbin
- mount -t proc proc /proc
- mount -t sysfs sysfs /sys
- ro=-r
- INIT=/sbin/init
- ROOTDELAY=
- DEBUG=
- NOAUFS=
- for i in $(cat /proc/cmdline)
- do
- case "$i" in
- rootdelay=*)
- ROOTDELAY=${i#rootdelay=}
- ;;
- esac
- done
- /sbin/depmod -a
- echo > /proc/sys/kernel/hotplug
- cp -a /lib/udev/devices/* /dev
- /sbin/udevd --daemon
- /sbin/udevtrigger
- /sbin/udevsettle
- if [ X$ROOTDELAY != X ]
- then
- echo "wait $ROOTDELAY seconds ......"
- sleep $ROOTDELAY
- fi
- for i in $(cat /proc/cmdline)
- do
- case "$i" in
- root=*)
- ROOT=${i#root=}
- case "$ROOT" in
- UUID=*)
- ROOT=${ROOT#UUID=}
- ROOT=$(realpath /dev/disk/by-uuid/$ROOT)
- ;;
- /dev/*)
- ROOT=$ROOT
- ;;
- *)
- ROOT=
- esac
- ;;
- init=*)
- INIT=${i#init=}
- ;;
- ro)
- ro=-r
- ;;
- rw)
- ro=
- ;;
- debug)
- DEBUG=1
- ;;
- noaufs)
- NOAUFS=1
- ;;
- esac
- done
- if [ X$DEBUG != X ]
- then
- echo "enter debug mode..."
- PS1='\[\033[0;34m(debug)\033[0m\]$ ' /bin/sh -i
- else
- PS1='\[033[0;31m(initramfs)\033[0m\]$ '
- [ -d /mnt/cdrom ] || mkdir /mnt/cdrom
- [ -d /mnt/root ] || mkdir /mnt/root
- [ -d /mnt/roroot ] || mkdir /mnt/roroot
- [ -d /mnt/rwroot ] || mkdir /mnt/rwroot
- if [ X$ROOT == X ]
- then
- echo "mount cdrom ......"
- modprobe iso9660
- for i in 1 2 4 8
- do
- for CDROM in /dev/cdrom*
- do
- mount -nt iso9660 -o ro $CDROM /mnt/cdrom
- mountpoint -q /mnt/cdrom && break
- [ -f /mnt/cdrom/root.sqfs ] && break
- umount /mnt/cdrom
- done
- [ -f /mnt/cdrom/root.sqfs ] && break
- sleep $i
- done
- else
- echo "mount rootdev(${ROOT}) ......"
- FSTYPE=$(/lib/udev/vol_id -t "${ROOT}" 2> /dev/null)
- if [ X$FSTYPE != X ]
- then
- modprobe nls_iso8859-1
- modprobe nls_cp437
- modprobe $FSTYPE
- for i in 1 2 4 8
- do
- mount -nt $FSTYPE -o ro $ROOT /mnt/cdrom
- mountpoint -q /mnt/cdrom && break
- sleep $i
- done
- fi
- fi
- mountpoint -q /mnt/cdrom || (echo "no rootdev";/bin/sh -i)
- if [ X$AUFS == X ]
- then
- echo "mount roroot ......"
- mount -o remount,rw /mnt/cdrom
- modprobe loop
- modprobe squashfs
- for i in 1 2 4 8
- do
- mount -nt squashfs -o loop,ro /mnt/cdrom/root.sqfs /mnt/roroot
- mountpoint -q /mnt/roroot && break
- sleep $i
- done
- mountpoint -q /mnt/roroot || (echo "no roroot";/bin/sh -i)
- mount -nt tmpfs -o mode=755 tmpfs /mnt/rwroot
- mountpoint -q /mnt/rwroot || (echo "no tmpfs";/bin/sh -i)
- echo "mount realroot ......"
- modprobe aufs
- for i in 1 2 4 8
- do
- mount -nt aufs -o br:/mnt/rwroot=rw:/mnt/roroot=ro aufsroot /mnt/root
- mountpoint -q /mnt/root && break
- sleep $i
- done
- mountpoint -q /mnt/root || (echo "no root";/bin/sh -i)
- mkdir /mnt/root/mnt/.rootdev
- mount --bind /mnt/cdrom /mnt/root/mnt/.rootdev
- touch /mnt/root/fastboot
- touch /mnt/root/.livecd
- else
- mount -n -o move /mnt/cdrom /mnt/root
- fi
- #start up hook
- [ -f /mnt/cdrom/onboot.sh ] && sh /mnt/cdrom/onboot.sh
- killall udevd
- umount /proc
- umount /sys
- fi
- exec switch_root /mnt/root $INIT "$@"
- EOF
复制代码
[color="Magenta"]解释:
[color="Red"]
1、因为CD和USB的空间有限,因此需要对root文件系统进行压缩,我使用的是squashfs来进行压缩,因为squashfs是只读的,可是实际运行中需要对/文件系统进行写操作,因此使用aufs来挂载/文件系统,将所有的写操作在内存中进行(squashfs和aufs的获取可能通过官方网站的提示进行,我的aufs是通过cvs获取的)
2、initrd使用initramfs,这种initrd比较简单,而且可控性很强,因为启动后,这个initrd就被释放,因此,使用busybox来提供大部分工具,省得复制一些运行库,目的是尽可能减少initrd的空间,不过,因为把一部分内核模块复制到initrd中了,initrd的容量已经比较大了,有20M左右,因此,这部分的减小没有太大意义,不过,如果只是编译内核,使得内核只支持IDE的cdrom的话,和部分USB的光驱,以及部分SATA的光驱的话,内核模块的容量还是比较小的。
3、在复制内核模块的fs部分,实际上只需要复制部分用得着的,比如livecd只需要isofs,aufs,squashfs,liveUSB只需要aufs,squashfs和USB分区的分区类型的相应模块
4、initrd中使用的是udev,只是为了方便,如果有能力的话,可以自己去创建设备节点(那样做有一些麻烦,因为还需要手动去加载相应的内核模块,工作量确实不少),就可以不用udev了
[color="Magenta"]额外工具
[color="Red"]其中一部分是参考BLFS的开发版的手册,其它的都可以从internet上获取
- tar xf zhcon-0.2.5.tar.gz
- cd zhcon-0.2.5
- zcat ../zhcon-0.2.5-to-0.2.6.diff.gz | patch -Np1
- ./configure --prefix=/usr --sysconfdir=/etc
- make && make install
复制代码
[color="Magenta"]解释:
[color="Red"]因为暂时不想安装X,因此,在控制台下面对中文的支持是必要的
- tar xf openssl-0.9.8d.tar.gz
- cd openssl-0.9.8d
- patch -Np1 -i ../openssl-0.9.8d-fix_manpages-1.patch
- make MANDIR=/usr/share/man
- make MANDIR=/usr/share/man install
- cp -v -r certs /etc/ssl &&
- install -v -d -m755 /usr/share/doc/openssl-0.9.8d &&
- cp -v -r doc/{HOWTO,README,*.{txt,html,gif}} \
- /usr/share/doc/openssl-0.9.8d
- cd /sources/blfs/ && rm -rf openssl-0.9.8d
- tar xf wget-1.10.2.tar.gz
- cd wget-1.10.2
- ./configure --prefix=/usr --sysconfdir=/etc && make && make install
- cd /sources/blfs/ && rm -rf wget-1.10.2
- tar xf pcre-7.2.tar.bz2
- cd pcre-7.2
- ./configure --prefix=/usr \
- --docdir=/usr/share/doc/pcre-7.2 \
- --enable-utf8 &&
- make &&
- make install
- mv -v /usr/lib/libpcre.so.* /lib/ &&
- ln -v -sf ../../lib/libpcre.so.0 /usr/lib/libpcre.so
- cd /sources/blfs/ && rm -rf pcre-7.2
- cat > /usr/bin/which << "EOF"
- #!/bin/bash
- type -pa "$@" | head -n 1 ; exit ${PIPESTATUS[0]}
- EOF
- chmod -v 755 /usr/bin/which
- chown -v root:root /usr/bin/which
- tar xf pkg-config-0.22.tar.gz
- cd pkg-config-0.22
- ./configure --prefix=/usr && make && make install
- cd /sources/blfs/ && rm -rf pkg-config-0.22
- tar xf cpio-2.9.tar.bz2
- cd cpio-2.9
- ./configure CPIO_MT_PROG=mt \
- --prefix=/usr \
- --bindir=/bin \
- --libexecdir=/tmp \
- --with-rmt=/usr/sbin/rmt &&
- make && make install
- cd /sources/blfs/ && rm -rf cpio-2.9
- tar xf pciutils-2.2.3.tar.bz2
- cd pciutils-2.2.3
- sed -i 's/null ;/null 2>\&1 ;/' update-pciids.sh &&
- make PREFIX=/usr &&
- make PREFIX=/usr install &&
- install -v -m 755 -d /usr/include/pci &&
- install -v -m 644 lib/libpci.a /usr/lib &&
- install -v -m 644 lib/*.h /usr/include/pci
- update-pciids
- cd /sources/blfs/ && rm -rf pciutils-2.2.3
- tar xf gc6.8.tar.gz
- cd gc6.8
- sed -i "s|\$(datadir)/@PACKAGE@|&-6.8|" doc/Makefile.in &&
- ./configure --prefix=/usr \
- --datadir=/usr/share/doc --enable-cplusplus &&
- make && make install &&
- install -v -m644 doc/gc.man /usr/share/man/man3/gc_malloc.3 &&
- ln -v -s gc_malloc.3 /usr/share/man/man3/gc.3 &&
- cd /sources/blfs/ && rm -rf gc6.8
- tar xf w3m-0.5.2.tar.gz
- cd w3m-0.5.2
- ./configure --prefix=/usr \
- --libexecdir=/usr/lib \
- --sysconfdir=/etc &&
- make && make install &&
- install -v -m644 -D doc/keymap.default /etc/w3m/keymap &&
- install -v -m644 doc/menu.default /etc/w3m/menu &&
- install -v -m755 -d /usr/share/doc/w3m-0.5.2 &&
- install -v -m644 doc/{HISTORY,READ*,keymap.*,menu.*,*.html} \
- /usr/share/doc/w3m-0.5.2
- cd /sources/blfs/ && rm -rf w3m-0.5.2
- tar xf screen-4.0.3.tar.gz
- cd screen-4.0.3
- ./configure --prefix=/usr --with-socket-dir=/var/run/screen \
- --with-sys-screenrc=/etc/screenrc &&
- sed -i -e "s%/usr/local/etc/screenrc%/etc/screenrc%" {etc,doc}/* &&
- make && make install &&
- install -m 644 etc/etcscreenrc /etc/screenrc
- cd /sources/blfs/ && rm -rf screen-4.0.3
- tar xf openssh-4.6p1.tar.gz
- cd openssh-4.6p1
- install -v -m700 -d /var/lib/sshd &&
- chown -v root:sys /var/lib/sshd &&
- groupadd -g 50 sshd &&
- useradd -c 'sshd PrivSep' -d /var/lib/sshd -g sshd \
- -s /bin/false -u 50 sshd
- sed -i "s:-lcrypto:/usr/lib/libcrypto.a -ldl:g" configure
- sed -i "s/lkrb5 -ldes/lkrb5/" configure &&
- ./configure --prefix=/usr --sysconfdir=/etc/ssh \
- --libexecdir=/usr/lib/openssh --with-md5-passwords \
- --with-privsep-path=/var/lib/sshd &&
- make && make install &&
- install -v -m755 -d /usr/share/doc/openssh-4.6p1 &&
- install -v -m644 INSTALL LICENCE OVERVIEW README* WARNING.RNG \
- /usr/share/doc/openssh-4.6p1
- cd /sources/blfs/ && rm -rf openssh-4.6p1
- tar xf dhcp-3.0.5.tar.gz
- cd dhcp-3.0.5
- patch -Np1 -i ../dhcp-3.0.5-client_dns-1.patch
- patch -Np1 -i ../dhcp-3.0.5-iproute2-1.patch
- ./configure &&
- make &&
- make LIBDIR=/usr/lib INCDIR=/usr/include install
- cat > /etc/dhclient.conf << "EOF"
- # dhclient.conf
- interface "eth0"{
- prepend domain-name-servers 127.0.0.1;
- request subnet-mask, broadcast-address, time-offset, routers,
- domain-name, domain-name-servers, host-name;
- require subnet-mask, domain-name-servers;
- }
- # end dhclient.conf
- EOF
- cd /sources/blfs/ && rm -rf dhcp-3.0.5
- cat > /etc/sysconfig/network-devices/dhclient.example << "EOF"
- ONBOOT="yes"
- SERVICE="dhclient"
- DHCP_START="-q <add additional start parameters here>"
- DHCP_STOP="-q -r <add additional stop parameters here>"
- # Set PRINTIP="yes" to have the script print
- # the DHCP assigned IP address
- PRINTIP="no"
- # Set PRINTALL="yes" to print the DHCP assigned values for
- # IP, SM, DG, and 1st NS. This requires PRINTIP="yes".
- PRINTALL="no"
- EOF
- tar xf ppp-2.4.4.tar.gz &&
- cd ppp-2.4.4 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- make install-etcppp &&
- cd /sources/blfs/ && rm -rf ppp-2.4.4
- tar xf rp-pppoe-3.8.tar.gz &&
- cd rp-pppoe-3.8 &&
- patch -Np1 -i ../rp-pppoe-3.8-iproute2-1.patch &&
- sed -i s%/usr/bin/logger%/bin/logger% scripts/pppoe-{connect,setup,stop}.in &&
- cd src &&
- ./configure &&
- make &&
- make install &&
- cat > /etc/sysconfig/network-devices/pppoe-example << "EOF"
- ONBOOT="yes"
- SERVICE="pppoe"
- EOF
- cd /sources/blfs/ && rm -rf rp-pppoe-3.8
- cd blfs-bootscripts-20070726 &&
- make install-service-pppoe &&
- cd /sources/blfs
- tar xf libpcap-0.9.6.tar.gz &&
- cd libpcap-0.9.6 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- install -v -m755 -d /usr/share/doc/libpcap-0.9.6 &&
- install -v -m644 doc/* /usr/share/doc/libpcap-0.9.6 &&
- cd /sources/blfs/ && rm -rf libpcap-0.9.6
- tar xf wireless_tools.28.tar.gz &&
- cd wireless_tools.28 &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf wireless_tools.28
- tar xf glib-2.12.12.tar.bz2 &&
- cd glib-2.12.12 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- cat > /etc/profile.d/glib2-locale.sh << "EOF"
- # Use the current locale charset for filenames
- # in applications using GLib
- export G_FILENAME_ENCODING=@locale
- EOF
- cd /sources/blfs/ && rm -rf glib-2.12.12
- tar xf wireshark-0.99.6.tar.bz2 &&
- cd wireshark-0.99.6 &&
- ./configure --prefix=/usr \
- --sysconfdir=/etc \
- --enable-threads \
- --disable-wireshark &&
- make &&
- make install &&
- install -v -m755 -d /usr/share/doc/wireshark-0.99.6 &&
- install -v -m644 FAQ README{,.linux} doc/README.* doc/*.{pod,txt} \
- /usr/share/doc/wireshark-0.99.6 &&
- pushd /usr/share/doc/wireshark-0.99.6 &&
- for FILENAME in ../../wireshark/*.html; do \
- ln -s -v $FILENAME .
- done &&
- popd &&
- cd /sources/blfs/ && rm -rf wireshark-0.99.6
- tar xf nmap-4.20.tar.bz2 &&
- cd nmap-4.20 &&
- ./configure --prefix=/usr --without-nmapfe &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf nmap-4.20
- tar xf traceroute-1.4a12.tar.gz &&
- cd traceroute-1.4a12 &&
- sed -i -e 's/-o bin/-o root/' Makefile.in &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- make install-man &&
- cd /sources/blfs/ && rm -rf traceroute-1.4a12
- tar xf whois_4.7.21.tar.gz &&
- cd whois-4.7.21 &&
- make &&
- make prefix=/usr install &&
- cd /sources/blfs/ && rm -rf whois-4.7.21
- tar xf bind-9.4.1-P1.tar.gz &&
- cd bind-9.4.1-P1 &&
- ./configure --prefix=/usr &&
- make -C lib/dns &&
- make -C lib/isc &&
- make -C lib/bind9 &&
- make -C lib/isccfg &&
- make -C lib/lwres &&
- make -C bin/dig &&
- make -C bin/dig install &&
- cd /sources/blfs/ && rm -rf bind-9.4.1-P1
- tar xf lftp-3.5.12.tar.bz2 &&
- cd lftp-3.5.12 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf lftp-3.5.12
- groupadd -g 46 proftpd &&
- useradd -c proftpd -d /srv/ftp -g proftpd \
- -s /usr/bin/proftpdshell -u 46 proftpd &&
- install -v -d -m775 -o proftpd -g proftpd /srv/ftp &&
- ln -v -s /bin/false /usr/bin/proftpdshell &&
- echo /usr/bin/proftpdshell >> /etc/shells &&
- tar xf proftpd-1.3.0.tar.bz2 &&
- cd proftpd-1.3.0 &&
- ./configure --prefix=/usr --sysconfdir=/etc \
- --localstatedir=/var/run &&
- make &&
- make install &&
- cat > /etc/proftpd.conf << "EOF"
- # This is a basic ProFTPD configuration file
- # It establishes a single server and a single anonymous login.
- ServerName "ProFTPD Default Installation"
- ServerType standalone
- DefaultServer on
- # Port 21 is the standard FTP port.
- Port 21
- # Umask 022 is a good standard umask to prevent new dirs and files
- # from being group and world writable.
- Umask 022
- # To prevent DoS attacks, set the maximum number of child processes
- # to 30. If you need to allow more than 30 concurrent connections
- # at once, simply increase this value. Note that this ONLY works
- # in standalone mode, in inetd mode you should use an inetd server
- # that allows you to limit maximum number of processes per service
- # (such as xinetd)
- MaxInstances 30
- # Set the user and group that the server normally runs at.
- User proftpd
- Group proftpd
- # Normally, files should be overwritable.
- <Directory /*>
- AllowOverwrite on
- </Directory>
- # A basic anonymous configuration, no upload directories.
- <Anonymous ~proftpd>
- User proftpd
- Group proftpd
- # Clients should be able to login with "anonymous" as well as "proftpd"
- UserAlias anonymous proftpd
- # Limit the maximum number of anonymous logins
- MaxClients 10
- # 'welcome.msg' should be displayed at login, and '.message' displayed
- # in each newly chdired directory.
- DisplayLogin welcome.msg
- DisplayFirstChdir .message
- # Limit WRITE everywhere in the anonymous chroot
- <Limit WRITE>
- DenyAll
- </Limit>
- </Anonymous>
- EOF
- cd /sources/blfs/ && rm -rf proftpd-1.3.0
- cd /sources/blfs/blfs-bootscripts-20070726
- make install-proftpd
- cd /sources/blfs
- tar xf gpm-1.20.1.tar.bz2 &&
- cd gpm-1.20.1 &&
- patch -Np1 -i ../gpm-1.20.1-segfault-1.patch &&
- patch -Np1 -i ../gpm-1.20.1-silent-1.patch &&
- ./configure --prefix=/usr --sysconfdir=/etc &&
- LDFLAGS="-lm" make &&
- make install &&
- cp -v conf/gpm-root.conf /etc &&
- ldconfig &&
- cat > /etc/sysconfig/mouse << "EOF"
- # Begin /etc/sysconfig/mouse
- MDEVICE="/dev/input/mouse0"
- PROTOCOL="imps2"
- GPMOPTS=""
- # End /etc/sysconfig/mouse
- EOF
- cd /sources/blfs/ && rm -rf gpm-1.20.1
- cd /sources/blfs/blfs-bootscripts-20070726
- make install-gpm
- cd /sources/blfs
- tar xf slang-2.1.1.tar.bz2 &&
- cd slang-2.1.1 &&
- ./configure --prefix=/usr --sysconfdir=/etc &&
- make &&
- make install_doc_dir=/usr/share/doc/slang-2.1.1 install-all &&
- chmod -v 755 /usr/lib/libslang.so.2.1.1 \
- /usr/lib/slang/v2/modules/*.so &&
- cd /sources/blfs/ && rm -rf slang-2.1.1
- tar xf mc-4.6.1.tar.gz &&
- cd mc-4.6.1 &&
- patch -Np1 -i ../mc-4.6.1-bash32-1.patch &&
- patch -Np1 -i ../mc-4.6.1-debian_fixes-1.patch &&
- CPPFLAGS="-DUTF8" ./configure --prefix=/usr \
- --enable-charset &&
- make &&
- convert-mans ISO-8859-1 UTF-8 lib/mc.hint{,.es,.it,.nl} &&
- convert-mans ISO-8859-2 UTF-8 lib/mc.hint{.cs,.hu,.pl} &&
- convert-mans ISO-8859-5 UTF-8 lib/mc.hint.sr &&
- convert-mans KOI8-R UTF-8 lib/mc.hint.ru &&
- convert-mans KOI8-U UTF-8 lib/mc.hint.uk &&
- convert-mans BIG5 UTF-8 lib/mc.hint.zh &&
- convert-mans ISO-8859-1 UTF-8 doc/{es,it}/mc.hlp.* &&
- convert-mans ISO-8859-2 UTF-8 doc/{hu,pl}/mc.hlp.* &&
- convert-mans ISO-8859-5 UTF-8 doc/sr/mc.hlp.sr &&
- convert-mans KOI8-R UTF-8 doc/ru/mc.hlp.ru &&
- make install &&
- chmod 1755 /usr/lib/mc/cons.saver &&
- cd /sources/blfs/ && rm -rf mc-4.6.1
- #comiple p7zip need nasm
- #wget "http://downloads.sourceforge.net/nasm/nasm-0.99.01.tar.bz2?modtime=1180529807&big_mirror=0"
- tar xf nasm-0.99.01.tar.bz2 &&
- cd nasm-0.99.01 &&
- ./configure && make &&
- cp nasm /usr/local/bin/ &&
- cd /sources/blfs/ && rm -rf nasm-0.99.01
- tar xf p7zip_4.51_src_all.tar.bz2 &&
- cd p7zip_4.51 &&
- cp makefile.linux_x86_asm_gcc_4.X makefile.machine &&
- make clean &&
- make all3 &&
- sed -i "s@DEST_HOME=/usr/local@DEST_HOME=/usr@" install.sh &&
- ./install.sh &&
- cd /sources/blfs/ && rm -rf p7zip_4.51
- tar xf fuse-2.7.0.tar.gz &&
- cd fuse-2.7.0 &&
- ./configure --disable-kernel-module --prefix=/usr &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf fuse-2.7.0
- tar xf sshfs-fuse-1.8.tar.gz &&
- cd sshfs-fuse-1.8 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf sshfs-fuse-1.8
- tar xf curl-7.16.3.tar.bz2 &&
- cd curl-7.16.3 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- find docs -name "Makefile*" -o -name "*.1" -o -name "*.3" | xargs rm &&
- install -v -d -m755 /usr/share/doc/curl-7.16.3 &&
- cp -v -R docs/* /usr/share/doc/curl-7.16.3 &&
- cd /sources/blfs/ && rm -rf curl-7.16.3
- #wget "http://downloads.sourceforge.net/curlftpfs/curlftpfs-0.9.1.tar.gz?modtime=1175788159&big_mirror=0"
- tar xf curlftpfs-0.9.1.tar.gz &&
- cd curlftpfs-0.9.1 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf curlftpfs-0.9.1
- tar xf ntfs-3g-1.710.tgz &&
- cd ntfs-3g-1.710 &&
- ./configure --prefix=/usr &&
- make &&
- make install &&
- cd /sources/blfs/ && rm -rf ntfs-3g-1.710
复制代码
[color="Magenta"]解释:
[color="Red"]
我只是安装一些我觉得有用的工具,具体应该安装哪些,视各人喜好而定
1、wget,lftp可以用来下载文件和访问ftp服务器
2、w3m可以浏览网页
3、screen是一个可爱的工具
4、openssh,proftpd分别提供ssh服务和ftp服务
5、dhcp可以动态获取IP,在很多场合下是必要的
6、rp-pppoe可以提供ADSL拨号功能
7、wireless-tool可以提供对无线网卡的控制(内核中已经把大部分无线网卡的驱动编译成模块了)
8、nmap,wireshark是网络工具
9、sshfs,curlftpfs,ntfs-3g是一些可爱的工具,sshfs可以通过ssh将远程主机上的文件系统挂载到本地;curlftpfs可以将远程FTP上的目录挂载到本地;ntfs-3g可以提供对ntfs的读写操作
10、cpio,p7zip是压缩解压工具,p7zip可以支持大部分的压缩格式
11、gpm支持控制台下面使用鼠标(启动后,我发现在/dev/input下面有鼠标的设备节点,分别是mouse0,mouse1....,所以就在配置文件中使用了/dev/input/mouse0作为鼠标的设备节点了)
12、mc是一个大部分人都说好的工具
[color="Blue"]期待您的参与,给提供一些好的工具,以便添加到livecd中
[color="Magenta"]修正启动脚本中的一点问题
- ln -sf /proc/mounts /etc/mtab
- cat > /etc/rc.d/init.d/mountfs <<"EOF"
- #!/bin/sh
- ########################################################################
- # Begin $rc_base/init.d/mountfs
- #
- # Description : File System Mount Script
- #
- # Authors : Gerard Beekmans - gerard@linuxfromscratch.org
- #
- # Version : 00.00
- #
- # Notes :
- #
- ########################################################################
- . /etc/sysconfig/rc
- . ${rc_functions}
- case "${1}" in
- start)
- boot_mesg "Remounting root file system in read-write mode..."
- [ -f /.livecd ] || mount -n -o remount,rw / >/dev/null 2>&1
- evaluate_retval
- # Remove fsck-related file system watermarks.
- rm -f /fastboot /forcefsck /.livecd
- # This will mount all filesystems that do not have _netdev in
- # their option list. _netdev denotes a network filesystem.
- boot_mesg "Mounting remaining file systems..."
- mount -an -O no_netdev >/dev/null 2>&1
- evaluate_retval
- ;;
- stop)
- boot_mesg "Unmounting all other currently mounted file systems..."
- umount -a -d -r >/dev/null 2>&1
- evaluate_retval
- ;;
- *)
- echo "Usage: ${0} {start|stop}"
- exit 1
- ;;
- esac
- # End $rc_base/init.d/mountfs
- EOF
复制代码
[color="Magenta"]解释:
[color="Red"]
因为livecd使用的方式有些特别,因此,在mountfs中运行的一些脚本可能出现错误(不影响实际的使用)
在livecd的initrd中已经挂载了/文件系统,并且是可写的,因此,在mountfs中就不需要重新以rw方式挂载/了
[color="Magenta"]设置一些必要的配置文件(来自BLFS手册)
[color="Magenta"]创建initrd和ISO
- cd /initrd
- find . | cpio -o -H newc | gzip -9 > /boot/initrd.img-2.6.22.1
- umount $LFS/{proc,sys,dev/shm,dev/pts,dev} [color="red"]#在宿主系统中执行[/color]
- /sources/squashfs3.2-r2/squashfs-tools/mksquashfs bin boot dev etc home lib media mnt opt proc root sbin srv sys tmp usr var /sources/root.sqfs
复制代码
[color="Magenta"]下面代码需要在宿主系统中操作
- cd $LFS
- mkdir -p isolinux/boot/grub
- cp ${LFS}/boot/{initrd.img-2.6.22.1,vmlinuz-2.6.22.1} isolinux/boot/
- cp ${LFS}/usr/lib/grub/i386-pc/{stage2_eltorito,stage1,stage2} isolinux/boot/grub/
- cp ${LFS}/sources/root.sqfs isolinux/
- cat > isolinux/boot/grub/menu.lst <<"EOF"
- default 0
- timeout 5
- title lfs(kernel 2.6.22.1)
- kernel /boot/vmlinuz-2.6.22.1 vga=788
- initrd /boot/initrd.img-2.6.22.1
- EOF
- mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o lfs.iso isolinux
复制代码
[color="Magenta"]至此,liveCD已经完成,$LFS目录下的lfs.iso就是最终的光盘映象文件,可以用虚拟机挂载上,看看效果了
[color="Blue"]因为写得仓促,如有错误之处,敬请指正 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|