Wakes installer

Installer call

Initramfs used to host the Wakes installer is a debian one. In the init script we use the keyword boot to pass the install argument:

        boot=*)
                BOOT=${x#boot=}
                ;;

As $BOOT is sourced:

. /scripts/${BOOT}

we created the file scripts/install:

mountroot ()
{
  /wakes/install.sh
}

and we use the moutroot function to start the Wakes installer;

mountroot

Install process description

The Wakes installer is divided into 3 phases:

1. wait_disk

2. initial_menu

3. choice_install

The actual installation is made by choice_install.

  • create partition

    fdisk $disk
  • create root volume group

    pvcreate -ff $sys_part
    vgcreate rootvg $sys_part
    lvcreate -l 90%VG rootvg
  • format root partion

    /sbin/mke2fs -j /dev/mapper/rootvg-lvol0
  • mount root partion

    create_dir $rootmnt
    mount /dev/mapper/rootvg-lvol0 $rootmnt
  • create root tree

    create_dir $rootmnt/sys $rootmnt/dev $rootmnt/proc $rootmnt/tmp \
    $rootmnt/var $rootmnt/var/lock $rootmnt/var/run $rootmnt/var/log \
    $rootmnt/etc $rootmnt/root $rootmnt/var/tmp $rootmnt/mnt $rootmnt/boot \
    $rootmnt/var/wkpkg $rootmnt/var/wkpkg/rep $rootmnt/var/wkpkg/db \
    $rootmnt/var/wkpkg/run $rootmnt/var/wkpkg/build \
    $rootmnt/var/wkpkg/mnt/cdrom $rootmnt/var/wkpkg/cat $rootmnt/mnt
  • install packages

    for pkg in $pkg_list
    do
      /bin/wkpkg -d $rootmnt -i $pkg
    done
  • create boot partition

    mke2fs -j $boot_part
    create_dir $rootmnt/boot
    mount $boot_part $rootmnt/boot
    
  • install linux kernel

    /bin/wkpkg -d $rootmnt -i linux
  • install grub

    create_dir $rootmnt/boot/grub
        cp $rootmnt/usr/lib/grub/i386-pc/* $rootmnt/boot/grub
    
        cat <<EOF > $rootmnt/boot/grub/menu.lst
    default         0
    timeout         10
    title           Wakes GNU/Linux, kernel 2.6.30.1
    root            (hd0,0)
    kernel          /vmlinuz root=/dev/mapper/rootvg-lvol0 ro quiet
    initrd          /initrd
    boot
    title           Install Wakes GNU/Linux
    root            (hd0,0)
    kernel          /vmlinuz-install boot=install quiet
    initrd          /initrd-install
    boot
    EOF
  • setup grub

    grub --no-curses --batch <<EOF > /dev/null 2>&1
    root ($gpart)
    setup ($gdisk)
    quit
    EOF
  • install config files

    cp -r /wakes/X11 $rootmnt/etc
  • create passwd

    cat <<EOF > $rootmnt/etc/passwd
    root:\$1\$8/H0/gjl\$L5QE8vjJw5BTt/QAu41gk/:0:0:root:/root:/bin/ksh
    nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
    sshd:x:50:50:sshd PrivSep:/var/lib/sshd:/bin/false
    rsyncd:x:48:48:rsyncd Daemon:/home/rsync:/bin/false
    EOF
  • create group

    cat <<EOF > $rootmnt/etc/group
    root:x:0:
    bin:x:1:
    sys:x:2:
    kmem:x:3:
    tty:x:4:
    tape:x:5:
    daemon:x:6:
    floppy:x:7:
    disk:x:8:
    lp:x:9:
    uucp:x:10:
    audio:x:11:
    video:x:12:
    utmp:x:13:
    usb:x:14:
    cdrom:x:15:
    mail:x:34:
    nogroup:x:99:
    sshd:x:50:
    rsyncd:x:48:
    EOF
  • create inittab

    cat <<EOF > $rootmnt/etc/inittab
    # Begin /etc/inittab
    
    id:3:initdefault:
    
    si::sysinit:/etc/rc.d/init.d/rc sysinit
    
    l0:0:wait:/etc/rc.d/init.d/rc 0
    l1:S1:wait:/etc/rc.d/init.d/rc 1
    l2:2:wait:/etc/rc.d/init.d/rc 2
    l3:3:wait:/etc/rc.d/init.d/rc 3
    l4:4:wait:/etc/rc.d/init.d/rc 4
    l5:5:wait:/etc/rc.d/init.d/rc 5
    l6:6:wait:/etc/rc.d/init.d/rc 6
    
    #ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
    
    su:S016:once:/sbin/sulogin
    
    1:2345:respawn:/sbin/agetty tty1 9600
    2:2345:respawn:/sbin/agetty tty2 9600
    3:2345:respawn:/sbin/agetty tty3 9600
    #4:2345:respawn:/sbin/agetty tty4 9600
    #5:2345:respawn:/sbin/agetty tty5 9600
    #6:2345:respawn:/sbin/agetty tty6 9600
    
    # Run xdm as a separate service
    x:5:respawn:/usr/X11R6/bin/xdm -nodaemon
    
    # End /etc/inittab
    EOF
  • create hosts

    cat <<EOF > $rootmnt/etc/hosts
    127.0.0.1       localhost
    EOF
  • create ld.so.conf

    # Begin /etc/ld.so.conf
    
    /usr/local/lib
    /opt/lib
    
    # End /etc/ld.so.conf
    EOF
  • create resolv.conf

    cat <<EOF > $rootmnt/etc/resolv.conf
    nameserver 89.2.0.1
    nameserver 89.2.0.2
    EOF
  • create network

    cat <<EOF > $rootmnt/etc/sysconfig/network
    HOSTNAME=$hostname
    EOF
  • create clock

    cat <<EOF > $rootmnt/etc/sysconfig/clock
    # Begin /etc/sysconfig/clock
    
    UTC=1
    
    # End /etc/sysconfig/clock
    EOF
  • create profile

    cat <<EOF > $rootmnt/etc/profile
    # Begin /etc/profile
    
    # Default PATH
    export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/i686-pc-linux-gnu/bin
    
    # For ksh -o vi
    export EDITOR=vi
    
    if [ "\`id -u\`" -eq 0 ]
    then
      PS1="\`id -un\`@\`uname -n\` # "
    else
      PS1='$ '
    fi
    
    # End /etc/profile
    EOF
  • create nsswitch.conf

    cat <<EOF > $rootmnt/etc/nsswitch.conf
    # Begin /etc/nsswitch.conf
    
    passwd: files
    group: files
    shadow: files
    
    hosts: files dns
    networks: files
    
    protocols: files
    services: files
    ethers: files
    rpc: files
    
    # End /etc/nsswitch.conf
    EOF
  • create fstab

    cat <<EOF > $rootmnt/etc/fstab
    # Begin /etc/fstab
    
    # file system  mount-point  type   options         dump  fsck
    #                                                        order
    
    xxxxxxxxx      /            ext3   defaults        1     1
    yyyyyyyyy      /boot        ext3   defaults        1     1
    #/dev/zzzz     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
    tmpfs          /dev/shm     tmpfs  defaults        0     0
    
    # End /etc/fstab
    EOF
  • create wkpkg.conf

    cat <<EOF > $rootmnt/etc/wkpkg.conf
    # 
    # cat /etc/wkpkg.conf 
    
    # Default network depot
    http://www.gnuwakes.org/depot main
    
    #usb://depot main
    
    #ftp://www.gnuwakes.org/depot main
    #cdrom://depot    main
    
    #disk://var/wkpkg/rep main
    
    EOF
  • configure fstab

    sed -i "s%xxxxxxxxx %/dev/mapper/rootvg-lvol0 %; s%yyyyyyyyy %$boot_part %" \
        $rootmnt/etc/fstab
  • do some configuration...

      cd $rootmnt/usr/bin && ln -s gcc cc && cd /
      cd $rootmnt && ln -s /usr usr/X11R6
      cd $rootmnt && mkdir usr/share/fonts && \
        ln -s /usr/lib/X11/fonts/OTF usr/share/fonts/OTF && \
        ln -s /usr/lib/X11/fonts/TTF usr/share/fonts/TTF
    
      mkdir -p $rootmnt/usr/lib/X11/xdm
      print "DisplayManager*userPath:        /bin:/usr/bin:/sbin:/usr/sbin" \
        >> $rootmnt/usr/lib/X11/xdm/xdm-config
      print "DisplayManager*systemPath:      /bin:/usr/bin:/sbin:/usr/sbin" \
        >> $rootmnt/usr/lib/X11/xdm/xdm-config
    
      [ -f /usr/bin/i686-pc-linux-gnu-gcc-4.1.2 ] && \
        ln -s /usr/bin/i686-pc-linux-gnu-gcc-4.1.2 /usr/bin/gcc
  • confiigure network

    cd $rootmnt/etc/sysconfig/network-devices
      mkdir ifconfig.eth0
      cat << EOF > ifconfig.eth0/ipv4
    ONBOOT=yes
    SERVICE=ipv4-static
    IP=$ip_address
    GATEWAY=$gateway
    PREFIX=$prefix
    EOF
  • setup Wakes version

    print "0.1" > $rootmnt/etc/wakes_version
  • install root passsword

    print -n "Enter root password: "
      stty -echo
      read passwd
      stty echo
      print ""
      crypted=$(crypt $passwd)
      grep -v '^root:' $rootmnt/etc/passwd > $rootmnt/etc/passwd.tmp
      print "root:$crypted:0:0:root:/root:/bin/ksh" > $rootmnt/etc/passwd
      cat $rootmnt/etc/passwd.tmp >> $rootmnt/etc/passwd
      rm $rootmnt/etc/passwd.tmp
  • umount $rootmnt/boot

    umount $rootmnt/boot
  • create /dev/console

    [ -c $rootmnt/dev/console ] || mknod $rootmnt/dev/console c 5 1 
  • reboot

    reboot