archiso 3.18 KB
Newer Older
Aaron Griffin's avatar
Aaron Griffin committed
1
2
3
4
5
6
7
8
9
run_hook ()
{
    if [ "x${ramdisk_size}" = "x" ]; then
        ramdisk_size="75%"
    fi
    msg -n ":: Mounting tmpfs, size=${ramdisk_size}..."
	mount -t tmpfs -o "size=${ramdisk_size}" tmpfs /tmpfs
    msg "done."

Dan McGee's avatar
Dan McGee committed
10
    if [ "x${BOOT_MOUNT}" = "x" ]; then
11
12
        echo "ERROR: BOOT_MOUNT is not set. The boot-cd or boot-usb hook MUST"
        echo "       be run before this one.  This image was improperly built"
Aaron Griffin's avatar
Aaron Griffin committed
13
14
15
        exit 1
    fi

Simo Leone's avatar
Simo Leone committed
16
    squashimg="${BOOT_MOUNT}/archlive.sqfs"
17
    if [ "${copytoram}" = "y" ]; then
Simo Leone's avatar
Simo Leone committed
18
19
        /bin/cat ${squashimg} > /tmpfs/archlive.sqfs
        squashimg="/tmpfs/archlive.sqfs"
20
    fi
Aaron Griffin's avatar
   
Aaron Griffin committed
21

Aaron Griffin's avatar
   
Aaron Griffin committed
22
    msg ":: Mounting squashfs image"
Aaron Griffin's avatar
Aaron Griffin committed
23
    /bin/modprobe -q squashfs >/dev/null 2>&1
Aaron Griffin's avatar
Aaron Griffin committed
24
    /bin/mkdir -p /tmpfs/squashfs_root
Aaron Griffin's avatar
   
Aaron Griffin committed
25
    if ! /bin/losetup /dev/loop0 "${squashimg}" >/dev/null 2>&1; then
Aaron Griffin's avatar
Aaron Griffin committed
26
27
28
        echo "ERROR: Cannot mount loop device /dev/loop0...aborting"
        exit 1
    fi
Aaron Griffin's avatar
   
Aaron Griffin committed
29

Aaron Griffin's avatar
Aaron Griffin committed
30
    /bin/mount -r -t squashfs /dev/loop0 /tmpfs/squashfs_root
Aaron Griffin's avatar
Aaron Griffin committed
31

Aaron Griffin's avatar
   
Aaron Griffin committed
32
    msg ":: Mounting root (union) filesystem"
Aaron Griffin's avatar
Aaron Griffin committed
33
    /bin/modprobe -q unionfs >/dev/null 2>&1
Simo Leone's avatar
Simo Leone committed
34
    /bin/mount -t unionfs -o dirs=/tmpfs=rw none /real_root
Aaron Griffin's avatar
Aaron Griffin committed
35

Simo Leone's avatar
Simo Leone committed
36
37
38
39
    # TODO: some of this could be broken into functions
    LOOP_NUM="1"
    addon_dir="${BOOT_MOUNT}/addons"
    if [ -e "${addon_dir}/config" ]; then
40
        msg ":: Mounting addons"
Simo Leone's avatar
Simo Leone committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        while read img mountpoint type; do
            # check if this line is a comment (starts with #)
            [ "${img#'#'}" != "${img}" ] && continue

            if [ "${type}" = "bind" ]; then
                msg "   Binding ${img} to ${mountpoint}"
                mkdir -p /real_root${mountpoint}
                /bin/mount -o bind ${addon_dir}/$img /real_root${mountpoint}
            elif [ "${type}" = "squashfs" ]; then
                msg "   Adding new union branch: ${img}"
                mkdir -p "/tmpfs/mnt/loop${LOOP_NUM}"
                if ! /bin/losetup "/dev/loop${LOOP_NUM}" ${addon_dir}/$img > /dev/null 2>&1; then
                    echo "ERROR: Cannot mount loop device /dev/loop${LOOP_NUM}"
                    echo "       Couldn't mount all addons"
                    break
                fi
                /bin/mount -r -t squashfs "/dev/loop${LOOP_NUM}" "/tmpfs/mnt/loop${LOOP_NUM}"
                /bin/mount -t unionfs -o remount,add=:/tmpfs/mnt/loop${LOOP_NUM}=ro none "/real_root"
                LOOP_NUM=$(( $LOOP_NUM + 1 ))
            fi
        done < ${addon_dir}/config
62
63
    fi

Simo Leone's avatar
Simo Leone committed
64
65
    /bin/mount -t unionfs -o remount,add=:/tmpfs/squashfs_root=ro none /real_root

Aaron Griffin's avatar
Aaron Griffin committed
66
    if [ -d /proc/sys/dev/cdrom ]; then
Aaron Griffin's avatar
Aaron Griffin committed
67
68
69
70
        echo 0 > /proc/sys/dev/cdrom/lock
        echo 1 > /proc/sys/dev/cdrom/autoeject
    fi

71
72
73
74
75
76
    if [ "${break}" = "y" ]; then
        echo ":: Break requested, type 'exit' to resume operation"
        echo "   NOTE: klibc contains no 'ls' binary, use 'echo *' instead"
        PS1="ramfs$ " /bin/sh -i
    fi

Aaron Griffin's avatar
Aaron Griffin committed
77
    udevpid=$(/bin/minips -C udevd -o pid=)
Aaron Griffin's avatar
Aaron Griffin committed
78
    [ "x${udevpid}" != "x" ] && /bin/kill -9 $udevpid 2>&1 >/dev/null
Aaron Griffin's avatar
Aaron Griffin committed
79
    #Yep, we're bailing out here.  We don't need kinit.
Aaron Griffin's avatar
Aaron Griffin committed
80
    msg ":: Passing control to Archlinux Initscripts...Please Wait"
Aaron Griffin's avatar
   
Aaron Griffin committed
81
82
    /bin/umount /sys
    /bin/umount /proc
Aaron Griffin's avatar
Aaron Griffin committed
83
84
    exec /bin/run-init -c /dev/console /real_root /sbin/init ${CMDLINE}
}
Dan McGee's avatar
Dan McGee committed
85
86

# vim:ft=sh:ts=4:sw=4:et: