User:Az990tony/Customizing-SysRescCD-for-XS

From OLPC
Jump to navigation Jump to search

Customizing SysRescCD for use with XS School Server

There are several things you can do to customize [| SysRescCD] for use with an XS School Server.

  • Configure the static IP addresses
  • Configure the ethernet ports to specific MAC addresses
  • Define userids to be used with SSHD
  • Have ssh public keys to allow remote administration
  • Include backup or rescue files

Download and Burn original SysRescCD

The easiest way to do this is to perform "wget" for the iso file. I had to update my resolv.conf to a DNS nameserver I could access, and then do a wget for the URL involved. The file is about 200MB and took me about 11 minutes to download on my system.

[root ~]#  echo "nameserver 205.171.3.65" >> /etc/resolv.conf
[root ~]#  wget -c http://downloads.sourceforge.net/systemrescuecd/systemerscuecd-x86-1.0.3.iso
   ... systemrescuecd-x86-1.0.3.iso saved...
[root ~]#  cdrecord -scanbus
scsibus6:
       6,0,0   600) 'ATAPI   ' 'DVD A  DH20A4H  ' 'QP53' Removable CD-ROM
[root ~]#  cdrecord dev=6,0,0 -v systemerscuecd-x86-1.0.3.iso

Unpack the files

Boot from the SysRescueCD you just made, and hit enter at the "boot: " command prompt. We are basically going to open up the CD, and put all the files on our hard-drive. I will use /dev/sda3 as an example.

[root@sysresccd /root]%  mount /dev/sda3 /mnt/custom
[root@sysresccd /root]%  /usr/sbin/sysresccd-custom extract
/mnt/custom is mounted -> ok
there is enough estimated free space here (25548 MB) -> ok
docache not used -> ok
[root@sysresccd /root]%  cd /mnt/custom/customcd
[root@sysresccd ../customcd]%  ls
files  isoroot
[root@sysresccd ../customcd]% cd isoroot
[root@sysresccd ../isoroot]% ls
bootdisk  isolinux  syslinux  version
[root@sysresccd ../isoroot]% cd isolinux
[root@sysresccd ../isolinux]% ls
altker32  f1boot.msg    f4arun.msg    f7net.msg     isolinux.cfg  memtest86
altker64  f2images.msg  f5troubl.msg  initram.igz   maps          rescue64
boot.cat  f3params.msg  f6pxe.msg     isolinux.bin  memdisk       rescuecd

If you will updating the "initram.igz", you will have to further unpack that as follows:

 [root@sysresccd ../isolinux]% gunzip -c initram.igz > initram.img
 [root@sysresccd ../isolinux]% mkdir work
 [root@sysresccd ../isolinux]% cd work
 [root@sysresccd ../work]% cpio -id < ../initram.img
36176 blocks
 [root@sysresccd ../work]% ls
bin  dev  etc  init  lib  lib64  linuxrc  proc  sbin  sys  temp  usr  var

Create Additional Mount points

root@sysresccd /mnt/custom/customcd % cd files
root@sysresccd /mnt/custom/customcd/files % ls
bin   dev  home  lib64  mnt  proc  sbin  tftpboot  usr
boot  etc  lib   media  opt  root  sys   tmp       var
root@sysresccd /mnt/custom/customcd/files % cd mnt
root@sysresccd /mnt/custom/customcd/files/mnt % ls
cdrom  floppy
root@sysresccd /mnt/custom/customcd/files/mnt % mkdir boot fed deb usbkey scratch new old
root@sysresccd /mnt/custom/customcd/files/mnt % ls
boot  cdrom  deb  fed  floppy  new  old  scratch  usbkey

Define Name Server

Normally, the nameserver is not pre-defined in the SysRescCD, so if you want to download RPM packages, you will either need to do a "net-config eth0" or update your /etc/resolv.conf file.

[root@sysresccd /root]% cd /mnt/custom/customcd/files/etc
[root@sysresccd /mnt/../etc]% echo "nameserver 205.171.3.65" >> resolv.conf

Make the MAC address values persistent

Every Linux system seems to have its own way of assigning ethernet devices to physical ports. The XS School Server has an eth0 for WAN connection to the outside world, and eth1/eth2 for LAN connection to other computers and the mesh antennae. However, the SysRescCD chose a different scheme. This can be fixed by copying the "persistent rules" file from memory into the appropriate subdirectory of our extracted set. In my case, the "xx:ed" will be eth0, "xx:df" will be "eth1" and the "xx:ee" will be eth2.

[root@sysresccd /etc/udev/rules.d] % cat 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1g:fc:1q:4f:ed",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:n1:19:76:df",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:s1:14:1e:ee",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
root@sysresccd /mnt/custom/customcd/files % cd etc/udev/rules.d
root@sysresccd /mnt/custom/customcd/files/etc/udev/rules.d % cp /etc/udev/rules.d/70-persistent-net.rules .
root@sysresccd /mnt/custom/customcd/files/etc/udev/rules.d % ls
05-udev-early.rules               64-device-mapper.rules
30-kernel-compat.rules            64-md-raid.rules
40-alsa.rules                     65-permissions.rules
40-gentoo.rules                   70-persistent-net.rules
40-video.rules                    75-cd-aliases-generator.rules
50-udev-default.rules             75-persistent-net-generator.rules
60-cdrom_id.rules                 80-drivers.rules
60-persistent-input.rules         90-hal.rules
60-persistent-storage.rules       90-network.rules
60-persistent-storage-tape.rules  95-udev-late.rules
61-persistent-storage-edd.rules   99-fuse.rules
root@sysresccd /mnt/custom/customcd/files/etc/udev/rules.d % vi 70-persistent-net.rules
root@sysresccd /mnt/custom/customcd/files/etc/udev/rules.d %

Building the ISO image file

We are now ready to burn the ISO image file. This can be memory intensive, re-compressing the data back into a single file, so I will turn on the swap partition.

[root] swapon /dev/sda5
[root] /usr/sbin/sysresccd-custom squashfs