summaryrefslogtreecommitdiff
path: root/configs/syslinux-iso/overlay/etc/rc.d/archiso
blob: 97344122a2218212344e2701c6243f6ef90feff6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# vim: set ft=sh:
. /etc/rc.conf
. /etc/rc.d/functions


scan_network ()
{
    netparam () { echo ${2} | sed "s|.*${1}\([^ ]*\).*|\1|gi"; }
    #
    netdevs=$(cat /proc/net/dev | grep ':' | cut -d':' -f1)
    for net in ${netdev}; do
        stats=$(ifconfig ${net} | tr -s "\n" " ")
    done
}

scan_mount_pts ()
{
    #iterate over all block devices
    stat_busy "Scanning local block devices"
    for dev in $(echo /sys/block/*/dev /sys/block/*/*/dev); do

        devname="/dev/$(echo ${dev} | cut -d'/' -f3,4 | cut -d'/' -f1)"
        mountpt="/mnt/$(basename '${devname}')"
            mkdir -p "${mountpt}" 2>/dev/null
            mount ${options} "${devname}" "${mountpt}" >/dev/null 2>&1

                fstype=$(awk '{ if ($1=="${devname}") { print $3" "$4;q }}' /proc/mounts)
                fstype="${fstype%%,*}"
                case "${fstype%% *}" in
            *fat*|ntfs|*dos) options="user,exec,uid=0,gid=100,umask=00070" ;;
            *) options="users,defaults,exec" ;;
            #TODO handle 'sync' on usb devices... 
        esac

        echo "${devname} ${mountpt} ${fstype} ${options} 0 0 #configured by archiso" >>/etc/fstab
    done
    stat_done
}

scan_swap ()
{
    #Archie finds a pagefile.sys for windows/dos machines... may add later
    stat_busy "Finding existing swap partitions"
        swapdev="$(fdisk -l 2>/dev/null | grep swap | cut -d' ' -f1)"
    if [ -e "${swapdev}" ]; then
        swapon ${swapdev}
        echo "${swapdev} swap swap defaults 0 0 #configured by archiso" >>/etc/fstab
    fi
    stat_done
}

do_homedir ()
{
    stat_busy "Scanning for existing HOME directory"
    user="$(cmdline_param homeuser)"
    for hdir in $(find /mnt -name "home/${user}" 2>/dev/null); do
        mkdir -p "/home/arch/"
        # break after the first success...
        mount --bind "${hdir}" "/home/arch/" && break
    done
    stat_done
}

do_makeuser ()
{
    stat_busy "Making the default user arch"
    addgroups="audio,disk,optical,wheel"
    useradd -m -p "" -g users -G $addgroups arch
    stat_done
}

do_locale_gen ()
{
    stat_busy "Generating locales..."
    sed -i "s/#\(${LOCALE/[@.]*}\)/\1/" /etc/locale.gen
    /usr/sbin/locale-gen > /dev/null
    stat_done
}

# GIT does not manage perms others thans 755 and 644, so fix here.
do_fix_perms ()
{
    stat_busy "Fixing file permissions..."
    chmod 440 /etc/sudoers
    stat_done
}

# If an alternate console was specified on the kernel command line,
# start agetty on it too.
do_special_console()
{
    cmdline_console="$(kernel_cmdline console)"
    [ $? -ne 0 ] && return

    dev="${cmdline_console%%,*}"
    args="${cmdline_console##*,}"
    baud="${args%%[neo]*}" && baud="${baud:-"9600"}"
    [ "x${args}" != "x${args%%r}" ] && rts="-h"


    stat_busy "Starting agetty on console: ${cmdline_console}"
    echo "${dev}" >> /etc/securetty
    echo "z0:2345:respawn:/sbin/agetty ${rts} ${baud} ${dev} linux" >> /etc/inittab
    /sbin/telinit q
    stat_done
}

case "$1" in
  start)
    do_locale_gen
    do_makeuser
    do_fix_perms
    do_special_console
    ;;
esac
exit 0