-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.sh
More file actions
executable file
·213 lines (192 loc) · 6.72 KB
/
init.sh
File metadata and controls
executable file
·213 lines (192 loc) · 6.72 KB
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#!/bin/bash
if [ $$ -eq 1 ] ; then
# kill init guard
bash -ex /init
echo "init dead!"
PS1=">>> " bash
exec sleep inf
fi
source /etc/profile
export DEBIAN_FRONTEND=noninteractive
export DEBCONF_NONINTERACTIVE_SEEN=true
set -ex
exec <>/dev/console
agetty -L 115200 -a root tty2 &
############### mount sysfs ###############
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev
############### udevd ###############
/lib/systemd/systemd-udevd --daemon --debug &> /var/log/udevd.log
udevadm trigger -c add &> /var/log/udevd-trigger.log
udevadm settle
sync && sleep 1
############### networking ###############
for dev in $(ls /sys/class/net/ | grep -v lo) ; do
busybox ip link set up $dev || true
busybox udhcpc -i $dev -s /usr/share/udhcpc/default.script || true
done
dropbear -R -E 2>/dev/null || true
sync && sleep 1
############### detect disk ###############
# detect primary disk
DISK=""
for d in $(ls /sys/block | grep -v "^dm" | grep -v "^fd"); do
if echo $d | grep loop >/dev/null; then
continue
fi
if [[ "0" == "$(cat /sys/block/$d/removable)" ]] && [[ "$(realpath /sys/block/$d | grep usb)" == "" ]] ; then
DISK="$d"
break
fi
done
############### load config ###############
export PARTITION=true
export DEBOOTSTRAP=true
export CONFIGURE=true
export INSTALL_KERNEL=true
export INSTALL_GRUB=true
export INSTALL_PACKAGES="pardus-xfce-desktop"
export USER_NAME="pardus"
export DIST="yirmibes"
export USER_REALNAME="Pardus"
export USER_PASSWORD="pardus"
export REPO="https://depo.pardus.org.tr/pardus"
export REPO_SEC="http://depo.pardus.org.tr/guvenlik"
export DISK
for item in $(cat /proc/cmdline | tr " " "\n" | grep "=") ; do
name=${item/=*/}
name=${name/./_}
value=${item/*=/}
export "${name^^}"="$value"
done
############### run init ###############
if [ "$INIT" != "" ] ; then
wget -O /tmp/init.sh "$INIT"
source /tmp/init.sh
fi
# detect disk prefix
if echo ${DISK} | grep nvme ; then
DISKX=${DISK}p
else
DISKX=${DISK}
fi
############### part and format disk ###############
mkdir -p /target
if [ "$PARTITION" == "false" ] ; then
echo "paratitioning disabled"
elif [ -d /sys/firmware/efi ] ; then
parted -s /dev/"${DISK}" mktable gpt
parted -s /dev/"${DISK}" mkpart primary fat32 1 "500MB"
parted -s /dev/"${DISK}" mkpart primary fat32 500MB "100%"
sync && sleep 1
yes | mkfs.vfat /dev/${DISKX}1
yes | mkfs.ext4 /dev/${DISKX}2
mount /dev/${DISKX}2 /target
mkdir -p /target/boot/efi
mount /dev/${DISKX}1 /target/boot/efi
uuid_efi=$(blkid /dev/${DISKX}1 | sed "s/ /\n/g" | grep "^UUID")
uuid_rootfs=$(blkid /dev/${DISKX}2 | sed "s/ /\n/g" | grep "^UUID")
echo "${uuid_efi} /boot/efi vfat defaults,rw 0 0" > /tmp/fstab
echo "${uuid_rootfs} / ext4 defaults,rw 0 1" >> /tmp/fstab
else
parted -s /dev/"${DISK}" mktable msdos
parted -s /dev/"${DISK}" mkpart primary fat32 1 "100%"
sync && sleep 1
yes | mkfs.ext4 /dev/${DISKX}1
mount /dev/${DISKX}1 /target
uuid_rootfs=$(blkid /dev/${DISKX}1 | sed "s/ /\n/g" | grep "^UUID")
echo "${uuid_rootfs} / ext4 defaults,rw 0 1" >> /tmp/fstab
fi
sync && sleep 1
############### install base system ###############
if [ "$DEBOOTSTRAP" == "true" ] ; then
debootstrap --include "usr-is-merged usrmerge" $DIST-deb /target "$REPO"
cat > /target/etc/apt/sources.list <<EOF
### The Official Pardus Package Repositories ###
## Pardus
deb ${REPO} ${DIST} main contrib non-free non-free-firmware
# deb-src ${REPO} ${DIST} main contrib non-free non-free-firmware
## Pardus Deb
deb ${REPO} ${DIST}-deb main contrib non-free non-free-firmware
# deb-src ${REPO} ${DIST}-deb main contrib non-free non-free-firmware
## Pardus Security Deb
deb ${REPO_SEC} ${DIST}-deb main contrib non-free non-free-firmware
# deb-src ${REPO_SEC} ${DIST}-deb main contrib non-free non-free-firmware
EOF
chroot /target apt update --allow-insecure-repositories
chroot /target apt install pardus-archive-keyring --allow-unauthenticated -yq
chroot /target apt update
chroot /target apt full-upgrade -yq
sync && sleep 1
fi
############### install packages ###############
for dir in dev sys proc ; do
mount --bind /$dir /target/$dir
done
# kernel
if [ "${INSTALL_KERNEL}" != "false" ] ; then
chroot /target apt install -yq linux-image-amd64
sync && sleep 1
fi
############### install grub ###############
if [ -f /tmp/fstab ] ; then
mv /tmp/fstab /target/etc/fstab
fi
if [ "${INSTALL_GRUB}" != "false" ] ; then
if [ -d /sys/firmware/efi ] ; then
chroot /target apt install -yq grub-efi
chroot /target mount -t efivarfs efivarfs /sys/firmware/efi/efivars
chroot /target grub-install /dev/${DISK} --target="x86_64-efi"
else
chroot /target apt install -yq grub-pc
chroot /target grub-install /dev/${DISK} --target="i386-pc"
fi
chroot /target grub-mkconfig -o /boot/grub/grub.cfg
sync && sleep 1
fi
############### configure ###############
if [ "$CONFIGURE" != "false" ] ; then
# X11 keyboard
mkdir -p /target/etc/X11/xorg.conf.d/
cat > /target/etc/X11/xorg.conf.d/10-keyboard.conf << EOF
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "tr"
Option "XkbModel" "pc105"
#Option "XkbVariant" "f"
EndSection
EOF
# Language
echo "tr_TR.UTF-8 UTF-8" > /target/etc/locale.gen
echo "en_US.UTF-8 UTF-8" >> /target/etc/locale.gen
echo "LANG=tr_TR.UTF-8" > /target/etc/default/locale
echo "LC_CTYPE=en_US.UTF-8" >> /target/etc/default/locale
echo "Europe/Istanbul" > /target/etc/timezone
chroot /target timedatectl set-timezone Europe/Istanbul || true
rm -f /target/etc/localtime || true
ln -s ../usr/share/zoneinfo/Turkey /target/etc/localtime
chroot /target locale-gen || true
# Hosts file
echo "pardus" > /target/etc/hostname
echo "127.0.0.1 localhost" > /target/etc/hosts
echo "127.0.1.1 pardus" >> /target/etc/hosts
echo "" >> /target/etc/hosts
echo "# The following lines are desirable for IPv6 capable hosts" >> /target/etc/hosts
echo "::1 localhost ip6-localhost ip6-loopback" >> /target/etc/hosts
echo "ff02::1 ip6-allnodes" >> /target/etc/hosts
echo "ff02::2 ip6-allrouters" >> /target/etc/hosts
fi
############### install additional packages ###############
# desktop
chroot /target apt install -yq ${INSTALL_PACKAGES}
sync && sleep 1
############### create user ###############
if [ "$CONFIGURE" != "false" ] ; then
chroot /target useradd -m ${USER_NAME} -c "${USER_REALNAME}" -G cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,bluetooth,scanner,lpadmin -s /bin/bash -p $(openssl passwd -6 ${USER_PASSWORD})
fi
sync && sleep 1
############### reboot ###############
busybox reboot -f
echo "init done"