Booyo LiveCD/Make Initrd/Change Linuxrc
BooyoLiveCD/MakeInitrd/ChangeLinuxrc ¶1. CD 를 읽기 위한 모듈 로드
knoppix 의 방식을 그대로 사용한다. (단지 expert 옵션을 사용하여 디스크에서 모듈을 로드하는 부분은 없앤다. 없애지 않는다.)
KNOPPIX 의 경우 ¶
BERRY 의 경우 ¶
BOOYO 의 경우 ¶
http://kb.indiana.edu/data/adlt.html?cust=807776.19713.131 http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/man/README/README.ATAPI http://home.earthlink.net/~rongonz/home_rec/ide_scsi_etc.html
The number of machines which boot from a scsi cdrom or even scsi dvd-rom are relative small. It would be more like old 486 and P5 classic server-type machines. These machines are outdated. Any PII, PIII , P4 and AMD based ix86 based machine can boot from ATAPI cd-rom.
커널 옵션에 따라 필요한 모듈 로드 (자동검색이 불가능한가?) 불가능하다. 단지 kernel option 에서 yes 로 준 것만 가능하다. SCSI 옵션을 yes 로 주는 것으로 해결되는 것이 아니라 SCSI host adapter 을 모두 yes 로 주어야 한다. 하지만 이는 문제가 있다. (커널 사이즈, scsi host adapter module 의 bug) 결국 boot option 에서 noscsi 대신 scsi 옵션을 사용하여 scsi 를 사용하는 기기만 scsi host adapter modules 을 올릴 수 있도록 한다. 이 경우 expert 기능도 같이 있는 것이 좋을 듯 함. noscsi 옵션 그대로 사용하기로 함.
udev 를 initrd 에 넣고, 돌리면 어떨까? * udev 는 단지 /dev 파일을 만들뿐 모듈과는 무관하다. * /dev 파일을 점검하여 필요한 모듈을 찾는 것 역시 어렵다. * proc 만으로 점검하는 것도 어렵다.
udev 의 사이즈가 558K 인 것을 생각하면, 안 넣은 것이 바람직해보인다. 속도 문제 역시 없는 것이 좋을 것임. 문제는 어떤 /dev 파일을 초기에 만들어 놓을 것인가를 결정하는 것이 문제다. PC 만을 고려한다면 많은 /dev 파일이 필요하지는 않을 것이다.
이미 사이즈는 1.4M 는 넘었고, 2.8M 로 가능한가? floppy 를 완전히 무시하는 것이 맞는가?
전부를 로드하는 시간과 udev 를 사용하여 검색, 필요한 모듈만 올리는 것과의 시간 차이는? 다른 이유로 udev 를 사용해야 한다.
설치프로그램이 필요한 하드웨어를 점검하여, mkinitrd 의 RCFILE 에 모듈 로드 명령을 준다.
SCSI, USB, firewire, DVD, IDECD, IDERAID
2. enable DMA for FROMHD or TORAM mode
3. try to find LIVE CD or CD image (설치된 디바이스만 검색할 수는 없는가?)
이를 위해 udev 가 먼저 수행되어야 함. udev 를 수행해야 /dev 밑에 hd, scd, pcd, sd 등이 생성될 수 있슴. udev 를 수행하지 않으려면, /dev 밑에 위의 파일들을 만들어 놓아야 함. 몇개나 만들어 놓을 것인가? (knoppix 와 똑같이) 어느 방법이 시간이 더 걸리는가?
udev 를 사용하는 방법을 택한다. 단지 udev 가 필요한 /dev 파일들을 모두 생성하기를 바람.
/dev/hd, /dev/scd, /dev/pcd, /dev/sd
udev 사용 안하는 것으로 변경. 앞에서부터 찾으므로 시간의 문제는 없을 것으로 생각됨.
이 부분에 대한 점검이 필요함.
순서가 hda, hdb, hdc 등으로 안되어 있는 경우
하드디스크 파티션에 /KNOPPIX/KNOPPIX 가 있는 경우
여러개의 파티션에 /KNOPPIX/KNOPPIX 가 있는 경우
무조건 첫번째 /KNOPPIX/KNOPPIX 가 올라오도록 되어 있슴. (fromhd 옵션이 없는 경우, 즉 여러개가 있을 경우에는 fromhd 를 사용해야 함)
/KNOPPIX/KNOPPIX, /BERRY/BERRY, /BOOYO/BOOYO 가 존재하는지 점검
4. mount compressed image using cloop (mount_knoppix)
$INSMOD -f /modules/cloop.o file=$1/$KNOPPIX_DIR/$KNOPPIX_NAME 에 의해 /dev/cloop 가 자동생성되는가? 아니다.
이를 위해 /dev 밑에 cloop 가 존재하여야 하고, /dev/cloop0 에 링크되어 있어야 할 것 같음.
아니면 mountit /dev/cloop /KNOPPIX "-o ro" 을 mountit /dev/cloop0 /KNOPPIX "-o ro" 로 수정할 것
/KNOPPIX/KNOPPIX, /BERRY/BERRY, BOOYO/BOOYO
5. toram, tohd, bootfrom 의 옵션에 따라 필요한 일을 한다.
7. 메모리의 크기를 점검하여 ramdisk 를 만든다.
8. ramdisk 밑에 필요한 디렉토리를 만들고, 압축파일에서 필요한 파일을 복사하거나 링크한다.
9. udev 를 사용하여 필요한 /dev 파일을 만든다.
Knoppix 의 경우는 initrd 밑의 /dev 파일을 링크함. BERRY 의 경우는 devfs 를 사용함.
udev 를 사용할 것인지, /dev 파일을 만들어 놓을 것인지 검토 필요.
이 부분은 위로 올렸슴.
10. 루트 디바이스를 /dev/ram0 으로 바꾼다.
BERRY 의 경우 하드디스크에 ISO 형태로 있거나, 설치되어 있는 경우, pivot_root 를 사용함. dietlibc 가 2.6 커널을 충분히 지원할 때 다시 고려한다.
기본 방침 ¶initrd 는 knoppix 의 것을 가능한한 그대로 사용하도록 한다. linuxrc 역시 가능한한 조금 고친다. 실제로 고쳐야 할 점 커널, 모듈 /dev 도 그대로 사용하는 것이 좋겠음. (udev 를 사용하지 않는다) sysroot 를 사용하지 않고, cdrom 을 사용한다.
linuxrc 에서 scsi host adapter 를 detect 하는 것은 어렵다. 왜냐하면 비싼 scsi host adapter 카드는 rom 을 내장하고 있어 이에 의하여 detect 가 가능하지만, 싼 가격의 scsi host adapter 는 rom 을 사용하지 않으므로 detect 가 불가능할뿐 아니라, detect 과정에 의해 시스템 자체가 hang 하는 경우도 있다. udev 에 의해 생성되는 /dev 파일은 단지 scsi device 를 나타낼 뿐, scsi host adapter 를 나타내지는 않는다.
/ramdisk 관련 조사 필요. rm and cp 해야 하는 파일들의 목록을 만들어야 함.
knoppix 의 경우 /bin/mount -t tmpfs -o "size=${RAMSIZE}k" /ramdisk /ramdisk && mkdir -p /ramdisk/home /ramdisk/var && ln -s /ramdisk/home /ramdisk/var /
berry 의 경우 /bin/mount -t tmpfs -o "size=${RAMSIZE}k" /dev/shm /ramdisc mkdir -p /ramdisc/home /ramdisc/var mv /etc /ramdisc ln -s /ramdisc/home /ramdisc/var /ramdisc/var/tmp /ramdisc/etc /
/ramdisk 를 사용하는 경우와 /dev/shm 을 사용하는 것의 차이는? mv /etc /ramdisc: initrd.img 밑의 /etc 의 내용을 /ramdisk 로 이동 ln -s /ramdisc/var/tmp / 는 오류를 발생해야 하는 것 같은데... (오류발생하지 않음. 링크도 생성되지 않음)
2005.03.17 ¶
서비스 관련 오류들 ¶* mDNSResponder
for d in $(/usr/sbin/chkfontpath --list | cut -f 2 -d ':' | sort | uniq) ;do if [ -d "$d" ]; then cd "$d" if [ -e fonts.dir ]; then touch fonts.dir fi fi done* sendmail
option ¶
adios functions ¶
adios linuxrc ¶
slax linuxrc ¶
기본 방침 ¶
new linuxrc ¶
{{{ #!/bin/ash export PATH= mount -t proc proc /proc mount -t sysfs sysfs /sys modprobe loop ( check kernel config ) # modprobe isofs (Y in kernel) modprobe squashfs modprobe unionfs # ide-scsi 인 경우 # scsi 인 경우 # usb 인 경우 # firewire 인 경우 # harddisk 인 경우 {{{ # Create block devices to /dev described by /sys entries # create_block_devices() { echolog "creating /dev entries for block devices" ls -A1d /sys/block/*/dev /sys/block/*/*/dev 2>/dev/null | grep -v loop | while read BLOCK; do DEVICE="/dev/`basename \`dirname $BLOCK\``" if [ ! -b $DEVICE ]; then MINORMAJOR="`head -n 1 $BLOCK | tr ':' ' '`" mknod $DEVICE b $MINORMAJOR fi done } # List all CD-ROMs # by using /proc entries # list_cdrom_devices() { if [ "`cmdline_parameter nocd`" != "" ]; then return 1; fi for CDDEVICE in `cat /proc/sys/dev/cdrom/info | head -n 3 | tail -n 1 | cut -d ":" -f 2`; do echo "/dev/$CDDEVICE" done } }}} * http://bash.cyberciti.biz/diskadmin/rescan-scsi-bus.sh.html * busybox 로 initrd 를 만들고 이를 이용하여 device module 이 로드되기 전과 후의 차이를 알아내여야 함. (scsi, usb, ide-scsi, firewire) === busybox === * busybox 가 bin 밑에 있으면, ln 을 하지 않아도 수행이 됨. * insmod -f 가 문제가 됨. * /dev/sda14 만듬 * /suqash 만듬. * adios 밑에 * bin lib sbin usr * var 밑에 * boot etc home root tmp * 나머지 * media misc net opt selinux srv tmp var * proc sys dev mnt {{{ adios.sqfs [root@localhost tmp]# ls -l 합계 24 drwxr-xr-x 1 root root 791 5월 17 10:28 bin lrwxrwxrwx 1 root root 8 7월 19 12:55 boot -> ../boot/ lrwxrwxrwx 1 root root 7 7월 19 12:55 etc -> ../etc/ lrwxrwxrwx 1 root root 8 7월 19 12:55 home -> ../home/ drwxr-xr-x 1 root root 10 6월 20 11:50 initrd drwxr-xr-x 1 root root 2127 6월 10 14:29 lib lrwxrwxrwx 1 root root 9 7월 19 12:55 media -> ../media/ lrwxrwxrwx 1 root root 8 7월 19 12:55 misc -> ../misc/ lrwxrwxrwx 1 root root 7 7월 19 12:55 mnt -> ../mnt/ lrwxrwxrwx 1 root root 7 7월 19 12:55 opt -> ../opt/ lrwxrwxrwx 1 root root 8 7월 19 12:55 proc -> ../proc/ lrwxrwxrwx 1 root root 8 7월 19 12:55 root -> ../root/ drwxr-xr-x 1 root root 2539 7월 4 13:27 sbin lrwxrwxrwx 1 root root 11 7월 19 12:55 selinux -> ../selinux/ lrwxrwxrwx 1 root root 7 7월 19 12:55 srv -> ../srv/ lrwxrwxrwx 1 root root 7 7월 19 12:55 sys -> ../sys/ lrwxrwxrwx 1 root root 12 7월 19 12:55 tftpboot -> ../tftpboot/ lrwxrwxrwx 1 root root 7 7월 19 12:55 tmp -> ../tmp/ lrwxrwxrwx 1 root root 7 7월 19 12:55 usr -> ../usr/ drwxr-xr-x 1 root root 308 7월 14 13:28 var usr.sqfa [root@localhost tmp]# ls -l 합계 70 drwxr-xr-x 1 root root 48 10월 6 2004 X11R6 drwxr-xr-x 1 root root 19658 7월 13 10:56 bin drwxr-xr-x 1 root root 13 11월 17 2004 com drwxr-xr-x 1 root root 0 8월 13 2004 etc drwxr-xr-x 1 root root 0 8월 13 2004 games drwxr-xr-x 1 root root 3489 6월 6 10:19 include drwxr-xr-x 1 root root 31 3월 29 04:06 kerberos drwxr-xr-x 1 root root 28578 7월 13 10:56 lib drwxr-xr-x 1 root root 358 5월 16 13:57 libexec lrwxrwxrwx 1 root root 13 7월 19 13:19 local -> ../var/local/ drwxr-xr-x 1 root root 5917 7월 13 10:56 sbin drwxr-xr-x 1 root root 2119 6월 7 09:40 share drwxr-xr-x 1 root root 57 12월 16 2004 sleuthkit lrwxrwxrwx 1 root root 11 7월 19 13:19 src -> ../var/src/ lrwxrwxrwx 1 root root 10 7월 19 13:19 tmp -> ../var/tmp drwxr-xr-x 1 root root 28 6월 7 09:21 var }}} === note === * slax 의 linuxrc 방법이 좋기는 한데.... * linuxrc 에서는 cdrom 의 내용을 읽기만 한다. * 나머지 작업은 rc.sysinit 에서 한다. * 필요한 파일 복사 * 하드웨어 설정 * xorg 설정 * 나머지 설정은 rc 에서 * 이 경우 모듈을 나누어야 시험하기가 좋다. * 보다 좋은 방법은 없을까? * rc.sysinit 에서 아무것도 하지 않고, rc5.d 의 첫번째에서 모든 작업을 하게 하면, init 을 이용하여 쉽게 시험할 수 있지 않은가? 이 것이 가능한가? * init 을 수행하면 rc.sysinit 을 수행하는가? * pivot_root . initrd * 현재의 root file system 을 initrd 로 복사하고, 현재의 위치를 root file system 으로 사용할 준비가 된다. * exec chroot . /sbin/init * 현재의 위치를 root file system 으로 하고 init 수행. * 왜 busybox 가 /bin 밑에 있을때는 ln 을 안해도 수행되는가 알아 볼 것. === unionfs === * tar zxvf unionfs-1.0.13.tar.gz * edit Makefile {{{ #LINUXSRC = /lib/modules/$(KVERS)/build LINUXSRC = /usr/src/linux #UNIONFS_DEBUG_CFLAG = -g UNIONFS_DEBUG_CFLAG = }}} * make fistdev.mk 파일 {{{ EXTRACFLAGS=-DUNIONFS_NDEBUG }}} * make * make install * depmod -a * make static unionctl, uniondbg * can't make static unionimap {{{ gcc -o unionimap -luuid unionimap.c usercommon.c -I. -O2 -Wall -Werror -DUNIONFS_VERSION=\"1.0.13\" -static /tmp/ccQ5MWEM.o(.text+0x113): In function `create_forwardmap': unionimap.c: undefined reference to `uuid_generate' /tmp/ccQ5MWEM.o(.text+0x377): In function `create_reversemap': unionimap.c: undefined reference to `uuid_generate' /tmp/ccQ5MWEM.o(.text+0x622): In function `print_forwardmap': unionimap.c: undefined reference to `uuid_unparse' /tmp/ccQ5MWEM.o(.text+0x706):unionimap.c: undefined reference to `uuid_unparse' /tmp/ccQ5MWEM.o(.text+0x80e): In function `print_reversemap': unionimap.c: undefined reference to `uuid_unparse' /tmp/ccQ5MWEM.o(.text+0x832):unionimap.c: undefined reference to `uuid_unparse' collect2: ld returned 1 exit status make: *** [unionimap] 오류 1 }}} === JIN === * squashfs * unionfs * username: jin * passwd: jinjin * install * login root * copy JIN.build * relogin jin * opt/booyo 는 opt/live 로 수정 * initrd 에 넣는다. * user login 이 안됨. root login 은 됨. * tmp 는 unionfs 를 사용하지 않음. * chmod 1777 tmp 해야 함. * root login 시 firefox 가 동작 안함. * .mozilla 복사 후 됨. * initrd 에 root 를 /union/root 로 링크 시켜 놓으면, * 지워지고 새로운 /root 가 생성됨. * init 에서 링크 시킴. * totem 안 됨. fedora core 4 의 문제. |
He who has imagination without learning has wings but no feet. |