File: device.sh

package info (click to toggle)
mic2 0.19-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 932 kB
  • ctags: 864
  • sloc: python: 9,292; sh: 1,347; makefile: 62
file content (112 lines) | stat: -rw-r--r-- 3,546 bytes parent folder | download | duplicates (2)
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
#!/bin/sh

export DOMI_DISK_FILE="domi_disk"
export DOMI_DISK_SIZE="4096"                    # in megabytes
export DOMI_SWAP_SIZE="256"                     # in megabytes
export DOMI_ROOT_SIZE=""
export DOMI_FSTYPE="ext2"

export DOMI_DISK_SPARSE=1


########################################################################
# helper functions

function init_root() {
        local dev="$1"
        local type="${2-ext2}"
        local label="${3-${DOMI_NAME}-root}"

        case "$type" in
                ext2)
                        /sbin/mke2fs -L "$label" -q -F "$dev" \
                                || exit 1
                        ;;
                ext3)
                        /sbin/mke2fs -L "$label" -j -q -F "$dev" \
                                || exit 1
                        ;;
                reiserfs)
                        /sbin/mkreiserfs --label "$label" -q -f "$dev" \
                                || exit 1
                        ;;
                xfs)
                        /sbin/mkfs.xfs -L "$label" -q -f "$dev" \
                                || exit 1
                        ;;
                *)
                        /sbin/mkfs -t "$type" "$dev" \
                                || exit 1
                        ;;
        esac
}

function init_swap() {
        local dev="$1"
        local label="${2-${DOMI_NAME}-swap}"

        mkswap -L "$label" $dev || exit 1
}

# handle 1024*1024 vs. 1000*1000 issue ...
function mib2mb() {
        local mib="$1"
        echo $(( $mib * 1024 * 1024 / 1000 / 1000 ))
}
# setup environment
export LANG="POSIX"
unset $(set | grep ^LC_ | cut -d= -f1)

# create work dir
export DOMI_WORK="${TMPDIR-/tmp}/${0##*/}-$$"
export DOMI_MNT="${DOMI_WORK}/mnt"
mkdir "${DOMI_WORK}"    || exit 1
mkdir "${DOMI_MNT}"     || exit 1


if test "$DOMI_DISK_SPARSE" != ""; then
         echo "setup disk (sparse file ${DOMI_DISK_FILE})"
         rm -f "${DOMI_DISK_FILE}"
         dd if="/dev/zero" of="${DOMI_DISK_FILE}" \
                 bs="$(( 1024 * 1024 ))" \
                 seek="$(( ${DOMI_DISK_SIZE} - 1 ))" \
                 count=1
 else
         echo  "setup disk (image file ${DOMI_DISK_FILE})"
         dd if="/dev/zero" of="${DOMI_DISK_FILE}" \
                 bs="$(( 1024 * 1024 ))" \
                 count="${DOMI_DISK_SIZE}"
 fi
 for i in $(seq 0 63); do
         DOMI_DISK_DEV="/dev/loop${i}"
         if losetup -a | grep -q "${DOMI_DISK_DEV}:"; then
                 continue
         fi
         losetup "${DOMI_DISK_DEV}" "${DOMI_DISK_FILE}" || exit 1
         break;
 done
 
 # partitioning
 if test "${DOMI_ROOT_SIZE}" = ""; then
         DOMI_ROOT_SIZE=$(( ${DOMI_DISK_SIZE} - ${DOMI_SWAP_SIZE} ))
 fi
 parted -s ${DOMI_DISK_DEV} mklabel msdos                >/dev/null
 ps="0";    pe="$(( $ps + ${DOMI_ROOT_SIZE} ))"
 parted -s ${DOMI_DISK_DEV} mkpart primary ext2 \
         $(mib2mb $ps) $(mib2mb $pe)                     >/dev/null
 ps="$pe";  pe="$(( $ps + ${DOMI_SWAP_SIZE} ))"
 parted -s ${DOMI_DISK_DEV} mkpart primary linux-swap \
         $(mib2mb $ps) $(mib2mb $pe)                     >/dev/null
 parted -s ${DOMI_DISK_DEV} set 1 boot on                >/dev/null
 parted -s ${DOMI_DISK_DEV} print

 # activate partitions
 DOMI_ROOT_DEV="/dev/mapper/$(basename ${DOMI_DISK_DEV})-part1"
 DOMI_SWAP_DEV="/dev/mapper/$(basename ${DOMI_DISK_DEV})-part2"
 kpartx -v -p "-part" -a ${DOMI_DISK_DEV}
 init_root $DOMI_ROOT_DEV $DOMI_FSTYPE
 init_swap $DOMI_SWAP_DEV
 
 mount  ${DOMI_ROOT_DEV} ${DOMI_MNT} || exit 1
 
 echo ${DOMI_MNT}