about summary refs log blame commit diff stats
path: root/core/scripts/setup-install.sh
blob: 0e0a720b1a7b6a59b6587b12240d10c4a19dc686 (plain) (tree)
1
2
3
4
5
6
7
8
9

         


                  
 
             
              
                 
               
                  
               
                  
              






                  
 

                                            
                          

                                     
                               

                               
                             

                              

                                               
 

                       
                                    
 

















                                                      
 








                                                             





                                                             









                                                




                                









                                










                                           
 
                    



                                                                            
                                                                                                  


















                                                                                   
                                        





                                                           





































                                                                                    









                                                   
                                                    




                                     
                 









                                                                         














                                                                                     
                                                     


                                         
                                         



                                     
 

                                             
 


                                                
                                                                      





























                                                                                   
                                             
 
                                                                                                                                                        














                                                                               






                                    


                                      
 
                                 




                          
                          
             

                              
            

                

           
                                           
#!/bin/sh

# Set Global Vars
ADMIN_USER=c9admin
DEV=$1

CHROOT="/mnt"
##read BLK_EFI
BLK_EFI="${DEV}2"
##read BLK_BOOT
BLK_BOOT="${DEV}3"
##read BLK_ROOT
BLK_ROOT="${DEV}4"
##read BLK_VAR
BLK_VAR="${DEV}5"
##read BLK_USR
BLK_USR="${DEV}6"
##read BLK_SWP
BLK_SWP="${DEV}7"
##read BLK_HOME
BLK_HOME="${DEV}8"

# Absolute path to this script,
# e.g. /home/user/c9-doc/core/scripts/foo.sh
SCRIPT=$(readlink -f "$0")
# Absolute path this script is in, 
# e.g. /home/user/c9-doc/core/scripts
SCRIPTPATH=$(dirname "$SCRIPT")
# Absolute path to doc section,
# e.g /home/user/c9-doc/core
DIR=$(dirname "$SCRIPTPATH");
# Absolute path to local data,
# e.g /home/user/local
DIR_LOCAL="$(dirname $(dirname ${DIR}))/local";


DIR_CONF="${DIR}/conf"
DIR_PRT="${DIR}/ports";
ISO_FILE="${DIR_LOCAL}/crux-3.3.iso"

ConfirmOrExit ()
{
    while true
    do
        echo -n "Please confirm (y or n) :"
        read CONFIRM
        case $CONFIRM in
            y|Y|YES|yes|Yes) break ;;
            n|N|no|NO|No)
                echo "Aborting - you entered $CONFIRM"
                exit
                ;;
            *) echo "Please enter only y or n"
        esac
    done
    echo "You entered $CONFIRM. Continuing ..."
}


setup_target () {
    echo "1.1.2 Creating File System on $BLK_EFI with fat32:"
    mkfs.fat -F 32 $BLK_EFI
    echo "1.1.2 Creating File System on $BLK_BOOT with ext4:"
    mkfs.ext4 $BLK_BOOT
    echo "1.1.2 Creating File System on $BLK_ROOT with ext4:"
    mkfs.ext4 $BLK_ROOT
    echo "1.1.2 Creating File System on $BLK_VAR with ext4:"
    mkfs.ext4 $BLK_VAR
    echo "1.1.2 Creating File System on $BLK_USR with ext4:"
    mkfs.ext4 $BLK_USR
    echo "1.1.2 Creating Swap File System on $BLK_SWP:"
    mkswap $BLK_SWP
    echo "1.1.2 Creating File System on $BLK_HOME with ext4:"
    mkfs.ext4 $BLK_HOME

    echo "1.1.3 mount point to chroot (/mnt):\n"
    mount $BLK_ROOT $CHROOT

    mkdir -p $CHROOT/boot
    mount $BLK_BOOT $CHROOT/boot
    mkdir -p $CHROOT/boot/efi
    mount $BLK_EFI $CHROOT/boot/efi
    mkdir -p $CHROOT/var
    mount $BLK_VAR $CHROOT/var
    mkdir -p $CHROOT/usr
    mount $BLK_USR $CHROOT/usr
    mkdir -p $CHROOT/home
    mount $BLK_HOME $CHROOT/home


    mkdir -p $CHROOT/dev
    mkdir -p $CHROOT/tmp
    mkdir -p $CHROOT/proc
    mkdir -p $CHROOT/sys

    mkdir -p $CHROOT/var/lib/pkg
    mkdir -p $CHROOT/usr/ports

    mkdir -p $CHROOT/media

    mount --bind /dev $CHROOT/dev
    mount -vt devpts devpts $CHROOT/dev/pts
    mount -vt tmpfs shm $CHROOT/dev/shm
    mount -vt proc proc $CHROOT/proc
    mount -vt sysfs sysfs $CHROOT/sys

    modprobe isofs
    modprobe loop
    mount -o loop $ISO_FILE $CHROOT/media
}

install_packages() {

    echo "1.1.4 Create core.lst and install pkgadd"
    for p in $CHROOT/media/crux/core/*; do echo $p >> $CHROOT/core.lst; done

    tar xf "$CHROOT/media/crux/core/pkgutils#5.40-1.pkg.tar.xz" usr/bin/pkgadd -O > $CHROOT/pkgadd

    chmod +x $CHROOT/pkgadd

    echo "1.1.4 File core.lst complete, review list of packages before continue..."
    read PAUSE
    vim $CHROOT/core.lst

    echo "1.1.4 Starting install"
    touch $CHROOT/var/lib/pkg/db

    cd $CHROOT
    while read line; do
        echo "Installing $line;\n"
        $CHROOT/pkgadd -f -r $CHROOT $line
    done < core.lst

    rm $CHROOT/pkgadd
    rm $CHROOT/core.lst

   echo "1.1.5. Install extra packages;"

    mkdir $CHROOT/usr/ports/packages
    cp $CHROOT/media/crux/core/* $CHROOT/usr/ports/packages
    cp $CHROOT/media/crux/opt/* $CHROOT/usr/ports/packages
    cp $CHROOT/media/crux/xorg/* $CHROOT/usr/ports/packages

    echo "Installing $CHROOT/usr/ports/packages/fakeroot"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/fakeroot#*
    echo "Installing $CHROOT/usr/ports/packages/dbus"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/dbus#*
    echo "Installing $CHROOT/usr/ports/packages/expat"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/expat#*
    echo "Installing $CHROOT/usr/ports/packages/libnl"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/libnl#*
    echo "Installing $CHROOT/usr/ports/packages/libpng"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/libpng#*
    echo "Installing $CHROOT/usr/ports/packages/freetype"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/freetype#*
    echo "Installing $CHROOT/usr/ports/packages/libffi"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/libffi#*
    echo "Installing $CHROOT/usr/ports/packages/sqlite3"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/sqlite3#*
    echo "Installing $CHROOT/usr/ports/packages/python"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/python#*
    echo "Installing $CHROOT/usr/ports/packages/glib"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/glib#*
    echo "Installing $CHROOT/usr/ports/packages/grub2"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/grub2#*
    echo "Installing $CHROOT/usr/ports/packages/grub2-efi"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/grub2-efi#*
    echo "Installing $CHROOT/usr/ports/packages/wireless-tools"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/wireless-tools#*
    echo "Installing $CHROOT/usr/ports/packages/wpa_supplicant"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/wpa_supplicant#*
    echo "Installing $CHROOT/usr/ports/packages/lvm2"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/lvm2#*
    echo "Installing $CHROOT/usr/ports/packages/mdadm"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/mdadm#*
    echo "Installing $CHROOT/usr/ports/packages/efivar"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/efivar#*
    echo "Installing $CHROOT/usr/ports/packages/efibootmgr"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/efibootmgr#*
    echo "Installing $CHROOT/usr/ports/packages/dosfstools"
    $CHROOT/usr/bin/pkgadd -f -r $CHROOT $CHROOT/usr/ports/packages/dosfstools#*

    echo "1.1.6. Install extra ports;\n"

    mkdir $CHROOT/usr/ports/c9-ports
    cp -r $DIR_PRT/* $CHROOT/usr/ports/c9-ports/

    echo "1.1.7. dns resolver, copy resolv.conf;\n"
    cp /etc/resolv.conf $CHROOT/etc

    echo "1.1.8. Install Handbook\n"
    cp $CHROOT/media/crux/handbook.txt $CHROOT/root/

    echo "1.1.9. Install Skeletons\n"
    cp -r $DIR_CONF/skel $CHROOT/etc/
}

host_metadata() {

    echo "1.2.1. Set hostname and hosts;"
    cp $DIR_CONF/hosts $CHROOT/etc/
    vim $CHROOT/etc/hosts

    echo "1.2.2. Set timezone;"
    chroot $CHROOT /bin/bash -c tzselect

    echo "1.2.3. Set locale;"
    chroot $CHROOT /bin/bash -c "localedef -i en_US -f UTF-8 en_US.UTF-8"
    echo "1.2.4.2. Create Administrator $ADMIN_USER;"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "useradd -U -m -k /etc/skel -s /bin/bash $ADMIN_USER"

    echo "1.2.4.3. Add Administrator $ADMIN_USER to wheel group;"
    chroot $CHROOT /bin/bash -c "usermod -a -G wheel $ADMIN_USER"
    echo "1.2.4.3. Uncomment to allow members of group wheel to execute any command\n
    #    %wheel ALL=(ALL) ALL"
    cp $DIR_CONF/sudoers $CHROOT/etc/

    echo "1.2.5. File system table;"
    cp $DIR_CONF/fstab $CHROOT/etc/
    chroot $CHROOT /bin/bash -c "mount >> /etc/fstab"
    vim $CHROOT/etc/fstab

    echo "1.2.6. Initialization Scripts;"
    cp $DIR_CONF/rc.d/* $CHROOT/etc/rc.d/
    cp $DIR_CONF/rc.conf $CHROOT/etc/
    vim $CHROOT/etc/rc.conf

}

setup_ports() {
    echo "1.3.1. Build as unprivileged user;"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "useradd -U -M -d /usr/ports -s /bin/false pkgmk"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "usermod -a -G pkgmk $ADMIN_USER"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "chown -R root:pkgmk /usr/ports"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "chmod -R 774 /usr/ports"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "chmod 775 /usr/ports"

    echo "1.3.2. Ports Layout;"

    chroot --userspec=pkgmk:pkgmk $CHROOT /bin/bash -c "mkdir /usr/ports/work"
    chroot --userspec=pkgmk:pkgmk $CHROOT /bin/bash -c "mkdir /usr/ports/pkgbuild"
    chroot --userspec=pkgmk:pkgmk $CHROOT /bin/bash -c "mkdir /usr/ports/distfiles"

    chroot $CHROOT /usr/bin/env -i \
        HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
        PATH=/bin:/usr/bin:/sbin:/usr/sbin \
        /bin/bash -c "id pkgmk >> /etc/fstab"

    echo "pkgmk                                           /usr/ports/work tmpfs size=30G,gid=102,uid=101,defaults,mode=0750 0    0" >> $CHROOT/etc/fstab

    vim $CHROOT/etc/fstab

    echo "1.3.3 Configure pkgmk;"
    cp $DIR_CONF/pkgmk.conf $CHROOT/etc/
    #vim $CHROOT/etc/pkgmk.conf

    echo "1.3.4 Configure prt-get;"
    mv $CHROOT/etc/ports/contrib.rsync.inactive $CHROOT/etc/ports/contrib.rsync
    cp $DIR_CONF/prt-get.conf $CHROOT/etc/
    #vim $CHROOT/etc/prt-get.conf
}

echo "SCRIPT=$SCRIPT";
echo "SCRIPTPATH=$SCRIPTPATH";

echo "Device: $DEV\n"

echo "1.1.2 EFI block; ($BLK_EFI)"
echo "1.1.2 boot block; ($BLK_BOOT)"
echo "1.1.2 root block; ($BLK_ROOT)"
echo "1.1.2 var block; ($BLK_VAR)"
echo "1.1.2 usr block; ($BLK_USR)"
echo "1.1.2 swap block; ($BLK_SWP)"
echo "1.1.2 home block; ($BLK_HOME)\n"

echo "ADMIN_USER="$ADMIN_USER"\n"
echo "CHROOT=$CHROOT";
echo "DIR=$DIR";
echo "DIR_CONF=$DIR_CONF";
echo "DIR_PRT=$DIR_PRT";

echo "ISO_FILE=$ISO_FILE";
ConfirmOrExit
echo "press enter to continue"
read
setup_target
install_packages
host_metadata
setup_ports

echo "Ready to chroot $CHROOT /bin/bash \n"