blob: 8297ba1e6a9e6b91935292916be7e3d581f31ff7 (
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
|
#! /bin/sh
set -efu
prepare() {(
if test -e /etc/os-release; then
. /etc/os-release
case $ID in
arch)
prepare_arch "$@"
exit
;;
centos)
case $VERSION_ID in
6)
prepare_centos "$@"
exit
;;
7)
prepare_centos "$@"
exit
;;
esac
;;
debian)
case $VERSION_ID in
7)
prepare_debian "$@"
exit
;;
8)
prepare_debian "$@"
exit
;;
esac
;;
esac
elif test -e /etc/centos-release; then
case $(cat /etc/centos-release) in
'CentOS release 6.5 (Final)')
prepare_centos "$@"
exit
;;
esac
fi
echo "$0 prepare: unknown OS" >&2
exit -1
)}
prepare_arch() {
type bzip2 2>/dev/null || pacman -S --noconfirm bzip2
type git 2>/dev/null || pacman -S --noconfirm git
type rsync 2>/dev/null || pacman -S --noconfirm rsync
prepare_common
}
prepare_centos() {
type bzip2 2>/dev/null || yum install -y bzip2
type git 2>/dev/null || yum install -y git
type rsync 2>/dev/null || yum install -y rsync
prepare_common
}
prepare_debian() {
apt-get update
type bzip2 2>/dev/null || apt-get install bzip2
type git 2>/dev/null || apt-get install git
type rsync 2>/dev/null || apt-get install rsync
prepare_common
}
prepare_common() {
if ! getent group nixbld >/dev/null; then
groupadd -g 30000 -r nixbld
fi
for i in `seq 1 10`; do
if ! getent passwd nixbld$i 2>/dev/null; then
useradd \
-d /var/empty \
-g 30000 \
-G 30000 \
-l \
-M \
-s /sbin/nologin \
-u $(expr 30000 + $i) \
nixbld$i
fi
done
#
# mount install directory
#
if ! mount | grep -Fq ' on /mnt type '; then
mkdir -p /newshit
mount --bind /newshit /mnt
fi
if ! mount | grep -Fq ' on /mnt/boot type '; then
mkdir -p /mnt/boot
if mount | grep -Fq ' on /boot type '; then
bootdev=$(mount | grep " on /boot type " | sed 's/ .*//')
mount $bootdev /mnt/boot
else
mount --bind /boot/ /mnt/boot
fi
fi
#
# prepare install directory
#
rootpart=$(mount | grep " on / type" | sed 's/ .*//')
mkdir -p /mnt/etc/nixos
mkdir -m 0555 -p /mnt/var/empty
if ! mount | grep -Fq "$rootpart on /mnt/root type "; then
mkdir -p /mnt/root
mount --bind /root /mnt/root
fi
#
# prepare nix store path
#
mkdir -v -m 0755 -p /nix
if ! mount | grep -Fq "$rootpart on /mnt/nix type "; then
mkdir -p /mnt/nix
mount --bind /nix /mnt/nix
fi
}
prepare "$@"
|