summaryrefslogtreecommitdiff
path: root/package/gentooinstall/src/gentooinstall
blob: 0199df3d10c20eaefb01ab474f196acd3d158998 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/bin/mksh
# This file is part of the OpenADK project.
# install Gentoo to a block/flash device

if [ $(id -u) -ne 0 ]; then
  print installation is only possible as root
  exit 1
fi

# get architecture
arch=$(uname -m)
# get adk target system
target=$(cat /etc/.adktarget)
if [ -z $target ]; then
  print autodetection of target failed
  exit 1
fi

function help {
	cat >&2 <<EOF
Syntax: gentooinstall <archive> <device> <hostname>
EOF
	exit 1
}

if [ -z $1 ]; then
  print no archive given
  help 
fi

if [ -z $2 ]; then
  print no device given
  help 
fi

if [ -z $3 ]; then
  print no hostname given
  help 
fi

archive=$1
device=$2
hostname=$3
swapsize=2048000
fs=ext4
tools="parted partprobe sfdisk mkfs.ext2"

f=0
for tool in $tools;do
  if ! which $tool >/dev/null; then
    echo "checking if $tool is installed... failed"
    f=1
  fi
done
if [ $f -eq 1 ]; then 
  exit 1
fi

# create empty partition table
function create_label {
  print "creating empty partition table"
  parted -s $1 mklabel msdos > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "creating empty partition failed!"
    exit 1
  fi
}

# create partition, with fstype start and end in sectors
function create_partition {
  print creating partition on $1 with $2
  parted -s $1 -- unit MiB mkpart primary $2 $3 $4 > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "creating primary partition failed!"
    exit 1
  fi
}

function set_boot_flag {
  print setting bootflag on $1 partition $2
  parted -s $1 set $2 boot on > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "setting bootflag failed!"
    exit 1
  fi
}

function change_part_type {
  print setting partition type on $1 partition $2 to $3
  sfdisk --change-id $1 $2 $3 >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "changing partition type failed!"
    exit 1
  fi
}

function create_filesystem {
  print creating filesystem $2 on $1 partition $3
  mkfs.ext2 -j -F -q ${1}${3} >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "creating filesystem on partition failed!"
    exit 1
  fi
}

function mount_fs {
  print mounting ${1}${2} to $4 with filesystem $3
  mount -t $3 ${1}${2} $4
  if [ $? -ne 0 ]; then
    echo "mounting filesystem failed!"
    exit 1
  fi
}

function extract_archive {
  print extracting archive $1 onto $2
  tar -C $2 -xpf $1
  if [ $? -ne 0 ]; then
    echo "archive extraction failed!"
    exit 1
  fi
}

function create_chroot_installer {
(
  print emerge-webrsync
  print emerge dhcpcd
  print rc-update add sshd default
  print emerge grub:2
) >/mnt/install
  chmod 755 /mnt/install
}

function create_chroot_grubinstaller {
(
  print 'grub-mkconfig > /boot/grub/grub.cfg'
  print grub-install /dev/sda
) >/mnt/installgrub
  chmod 755 /mnt/installgrub
}

function chroot_install {
  print Installing Gentoo
  cat /etc/resolv.conf > /mnt/etc/resolv.conf
  mount -t proc proc /mnt/proc
  mount -t sysfs sys /mnt/sys
  mount -o bind /dev /mnt/dev
  mount -t tmpfs tmpfs /mnt/dev/shm
  chroot /mnt /install
  if [ $? -ne 0 ]; then
    echo "Gentoo installation failed!"
    umount /mnt/dev/shm
    umount /mnt/{proc,dev,sys}
    umount /mnt
    exit 1
  fi
  printf "Now manually install a kernel"
  chroot /mnt /bin/bash
  printf "Now installang bootloader"
  chroot /mnt /installgrub
  if [ $? -ne 0 ]; then
    echo "Gentoo installation failed!"
    umount /mnt/dev/shm
    umount /mnt/{proc,dev,sys}
    umount /mnt
    exit 1
  fi
}

case $arch {
  (x86|x86_64)
    create_label $device
    create_partition $device sw 2 2048
    create_partition $device ext2 2049 -1
    set_boot_flag $device 2
    partprobe $device
    sync
    create_filesystem $device $fs 2
    [[ -x /sbin/mdev ]] && mdev -s
    mount_fs $device 2 $fs /mnt
    extract_archive $archive /mnt
    create_chroot_installer
    chroot_install /mnt
    print "/dev/sda2	/	ext4	defaults	0	1" > /mnt/etc/fstab
    print hostname=\"$hostname\" > /mnt/etc/conf.d/hostname
    chmod 1777 /mnt/tmp
    sync
    umount /mnt/dev/shm
    umount /mnt/{proc,dev,sys}
    umount /mnt
    ;;
}

echo "Successfully installed Gentoo on $target."
exit 0