User:Az990tony/squashfs-surgery: Difference between revisions
No edit summary |
No edit summary |
||
Line 56: | Line 56: | ||
[root ~]# cat LIVE/root/anaconda-ks.cfg |
[root ~]# cat LIVE/root/anaconda-ks.cfg |
||
# Kickstart file for installing a school server |
# Kickstart file for installing a school server |
||
# For now, due to anaconda bug #243374 |
|||
# |
# |
||
# Use text mode install interactive |
# Use text mode install interactive - modified by Tony Pearson |
||
text |
text |
||
install |
install |
||
Line 68: | Line 67: | ||
# Network information |
# Network information |
||
network --device eth0 --bootproto dhcp --hostname schoolserver |
network --device eth0 --bootproto dhcp --hostname schoolserver |
||
# network --device=eth0 --bootproto=static --gateway=192.168.0.1 --ip=192.168.0.77 -- |
|||
nameserver=216.39.128.2 --netmask=255.255.255.0 |
|||
# rootpw --iscrypted $1$Bf0Ag93M$weSucLBipI6jTjtolgZE61 |
|||
firewall --enabled |
firewall --enabled |
||
authconfig --enableshadow --enablemd5 |
authconfig --enableshadow --enablemd5 |
Revision as of 15:06, 17 June 2008
The following was based on information found in [[ http://forums.fedoraforum.org/showthread.php?t=174916 | FedoraForum ]].
In the case of the XS School Server, the CD is designed to run in "batch mode" unattended. This may not be what you want. This can be fixed with some minor "squashfs surgery" as follows. Note: you need root authority to issue mount commands, so I found it easier to do the entire process logged in as root. I am sure that this can be done with appropriate sudo or su - commands.
1. Mount the source, in this case the old-XS-163.iso file. If you have the CD itself, you can unmount the physical CD (/media/OLPC_XS_163) and make the iso file using the "dd" command. Listing out the directory shows there are three items, a subdirectory called isolinux, a file called squashfs.img, and a subdirectory called sysroot.
[root ~]# cd /root [root ~]# umount /media/OLPC_XS_163 [root ~]# dd if=/dev/cdrom of=old-xs163.iso bs=2k [root ~]# mkdir /root/ISO [root ~]# mount -t iso9660 -o loop old-XS-163.iso ISO [root ~]# ls ISO isolinux squashfs.img sysroot
2. Unpack the file system "squashfs.img". This shows an os.img file, and another sysroot subdirectory. Note the -d squashfs-root is the default, but I include here for completeness.
[root ~]# cd /root [root ~]# yum install squashfs-tools (* if you have not yet installed it, now you can) [root ~]# modprobe squashfs (* make sure it is loaded into the system) [root ~]# unsquash -d squashfs-root ISO/squashfs.img [root ~]# ls squashfs-root os.img sysroot
3. This is like peeling layers off an onion. We are now going to mount the os.img as a file system in rw=read/write mode so that we can modify it.
[root ~]# cd /root [root ~]# mkdir LIVE [root ~]# mount -o loop,rw squashfs-root/os.img LIVE [root ~]# ls LIVE bin dev fsroot.olpc lib lost+found mnt proc ... boot etc home library media opt root ...
4. Here you can edit files, install or uninstall RPMs, etc., by using the --root parameter. In my case, I just want to edit the kickstart file with one I made using the "kickstart configurator". You may prefer instead just to edit it with your favorite text editor, such as gedit or vi. If you comment out any lines in the anaconda-ks.cfg, make sure the "#" is in column one, and a space exists in column 2 for each line you want ignored.
[root ~]# cd /root [root ~]# rpm -qa --root /root/LIVE | sort > xs-packages.lst [root ~]# cp LIVE/root/anaconda-ks.cfg /root/anaconda-ks.old [root ~]# gedit LIVE/root/anaconda-ks.cfg [root ~]# rm LIVE/root/*.cfg~ [root ~]# cat LIVE/root/anaconda-ks.cfg # Kickstart file for installing a school server # # Use text mode install interactive - modified by Tony Pearson text install interactive # lang en_US.UTF-8 # keyboard us skipx # xconfig --startxonboot # Network information network --device eth0 --bootproto dhcp --hostname schoolserver firewall --enabled authconfig --enableshadow --enablemd5 # selinux --permissive selinux --disabled timezone --utc America/New_York # bootloader --location=mbr --driveorder=sda --append="rhgb quiet" bootloader --location=none # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work # clearpart --linux --drives=sda # part /boot --fstype ext3 --size=100 --ondisk=sda # part / --fstype ext3 --size=8192 --ondisk=sda # part pv.6 --size=0 --grow --ondisk=sda # volgroup VolGroup00 --pesize=32768 pv.6 # logvol /library --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=200000 --grow # logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=2048 clearpart --none
5. When you are done with the edits, unmount LIVE and re-pack the contents. If you have a new-squash.img from a previous run, delete it first. The mksquashfs process can take a while, so now is a good time to get up and stretch or drink some coffee.
[root ~]# cd /root [root ~]# umount LIVE [root ~]# rm new-squash.img [root ~]# mksquashfs squashfs-root new-squash.img
6. We are now going to create a new folder that contains everything we need to burn a new CD. Note that the "/" (slash) after ISO is very important. The exclude copies all files except the original squashfs.img file, which we will replace with the new-squash.img we just made in step 5. Listing the BUILD directory shows that it is an exact match of what we had in step 1.
[root ~]# cd /root [root ~]# mkdir BUILD [root ~]# rsync -av --exclude='squash.img' ISO/ BUILD [root ~]# cp new-squashfs.img BUILD/squashfs.img [root ~]# ls BUILD isolinux squashfs.img sysroot
7. Now we generate the "iso" file itself. Note, the mkisofs command must be run from within the BUILD directory. The final character "." is important, and means all files in the BUILD directory are included in the *.iso image. Make sure that the new ISO has the same "CDLABEL" as the original by specifying the "-V" parameter. Compare the size of the new-xs163.iso file just created with the old-xs163.iso that we made in step 1.
[root ~]# cd /root/BUILD [root BUILD]# cat isolinux/isolinux.cfg | grep CDLABEL append initrd=initrd.img ro quiet root=CDLABEL=OLPC_XS_163 rootfstype=iso9660 liveimg append initrd=initrd.img ro quiet root=CDLABEL=OLPC_XS_163 rootfstype=iso9660 liveimg live_ram append initrd=initrd.img ro quiet root=CDLABEL=OLPC_XS_163 rootfstype=iso9660 liveimg check [root BUILD]# mkisofs -R -l -D -b isolinux/isolinux.bin -c isolinux/boot.catalog -o /root/new-xs163.iso -allow-leading-dots -input-charset default -no-emul-boot -boot-load-size 4 -boot-info-table -V "OLPC_XS_163" [root BUILD]# cd /root [root ~]# ls -l *.iso -rw-r--r-- 1 root root 474998784 2008-06-17 07:10 new-xs163.iso -rw-r--r-- 1 root root 475021312 2008-06-17 06:22 old-xs163.iso
8. We can test this "iso" file out with QEMU-KVM virtualization first, so that we don't burn any coasters. This step is optional, but can help reduce wasting blank CD media. First, we verify that our CPU has vmx or svm support, it has svm. Next we load the kvm module specific to the processor time, in this case AMD.
[root ~]# cd /root [root ~]# cat /proc/cpuinfo | grep svm flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse ts fid vid ttp tm stc 100mhzsteps [root ~]# modprobe kvm-amd [root ~]# qemu-kvm -m 1024 -cdrom new-xs163.iso
9. Finally, we are ready to burn the ISO to a CD. You can use any graphical program, or use the wodim program.