blob: 89f59c0364cb3f4b6f5030c1eed8722977e17769 (
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
#!/bin/sh
# die: print message to stderr and exit with error code
#
# PARAMETERS
# $1 $2 ... - message to be printed
die()
{
echo "$CE$N: fatal error: $*$CN" >&2
echo "For detailed log, see: $LOG"
exit 1
}
warn()
{
echo "$CE$N: warning: $*$CN" >&2
}
notice()
{
echo "$CX$N: $*$CN" >&2
}
lx()
{
notice "[exec]: $*"
"$@"
}
# make sure we're not root
if test `id -u` = "0"
then
die "Please install SBS in a user account, not as root"
fi
# enable colors only on terminal devices
TPUT="`which tput`"
if test -t 0 -a -t 1 -a -n "$TPUT"
then
CI="`$TPUT setf 6 || true`"
CE="`$TPUT setf 4 || true`"
CX="`$TPUT setf 2 || true`"
CN="`$TPUT sgr0 || true`"
else
CI=''
CE=''
CX=''
CN=''
fi
N="`basename \"$0\"`"
# default logging is none
LOG="$(mktemp /tmp/.sbs-install-XXXXXX)"
[ $? -eq 0 ] || { echo "$CE$N: error: unable to open log file$CN" >&2; exit 1; }
echo "SBS install begin" > "$LOG"
date >> "$LOG"
git rev-parse --short HEAD >> "$LOG"
echo >> "$LOG"
echo
echo "$CI""SBS install script$CN"
echo "$CI""git version: `git rev-parse --short HEAD`$CN"
echo "$CI""last commit: `git log HEAD^1.. | grep ^Date:`$CN"
echo "$CI""For help see: http://www.tizendev.org$CN"
echo
check_email_and_complain()
{
local email name
# figure out the user's single ID
while true
do
email="`git config --global --get user.email`"
if [ "$email" ]
then
break
fi
echo "git username and email address are not set correctly."
echo "SBS will configure these for you now."
echo "Example name: Ko Jengi"
echo "Example email: ko.jengi@samsung.com"
echo
echo -n "Your name: "
read name
echo -n "Your email: "
read email
git config --global user.name "$name"
git config --global user.email "$email"
echo
done
}
copy_key_from_scratchbox()
{
if ! test -f "$HOME/.ssh/id_rsa"
then
if test -f "/scratchbox/users/$USER/home/$USER/.ssh/id_rsa"
then
echo "Copying public key from old scratchbox install"
mkdir -p "$HOME/.ssh"
cp -f "/scratchbox/users/$USER/home/$USER/.ssh"/id_rsa* "$HOME/.ssh"
fi
fi
}
check_sbs_uptodate()
{
local branch
# update sbs
echo -n "Updating sbs... "
# using origin/master because this is the default setup by git
(git fetch "$REMOTE""tools/sbs" master:origin/master -q >> "$LOG") || die "failed to fetch sbs repository"
if ! git diff-index --quiet HEAD
then
echo
echo
echo "$CE""Files have been changed. Please checkin changes or remove them with:""$CN"
echo "$CE""git reset --hard origin""$CN"
echo
die "Repository not clean"
fi
# check the current branch contains the latest we fetched from above
branch=`git branch --contains origin/master 2> /dev/null | grep "^\\* "`
if [ ! "$branch" ]
then
warn "Please update to origin. e.g. git reset --hard origin"
die "Repository not up-to-date"
fi
echo "done"
}
# location of server with all our source
REMOTE=${SBS_INSTALL_REMOTE:-"112.106.1.251:"}
# our original cwd
ROOTDIR="`pwd`"
# no user compile options, thanks
unset CC CFLAGS LDFLAGS MAKE MAKEFLAGS PANTS
if [ ! "$SBS_INSTALL_LAX" ]
then
check_email_and_complain
copy_key_from_scratchbox
#check_sbs_uptodate
fi
# which distribution are we installing on?
cat /etc/lsb-release >> "$LOG" 2> /dev/null
INSTALLDIR=${SBS_INSTALL_DIR:-"$HOME/sbs-install"}
BUILDDIR="$ROOTDIR/Build"
SB2DIR="$BUILDDIR/scratchbox2"
QEMUDIR="$BUILDDIR/qemu"
DEBOOTDIR="$BUILDDIR/debootstrap"
LUTILDIR="$BUILDDIR/lutil"
missing=''
pkg-config --version >/dev/null 2>&1 || { missing="$missing pkg-config"; warn "pkg-config missing - dependency checks won't be accurate"; }
pkg-config --exists libxml-2.0 >/dev/null 2>&1 || missing="$missing libxml2-dev"
pkg-config --exists uuid >/dev/null 2>&1 || missing="$missing uuid-dev"
cpp --version >/dev/null 2>&1 || { missing="$missing cpp"; warn "cpp missing - dependency checks won't be accurate"; }
echo | cpp -include archive.h >/dev/null 2>&1 || missing="$missing libarchive-dev"
echo | cpp -include lzo/lzo1x.h >/dev/null 2>&1 || missing="$missing liblzo2-dev"
gcc --version >/dev/null 2>&1 || { missing="$missing gcc"; warn "gcc missing - dependency checks won't be accurate"; }
[ `uname -m` != 'x86_64' ] || echo '#include <asm/errno.h>' | gcc -m32 -xc -c -o /dev/null - >/dev/null 2>&1 || missing="$missing gcc-multilib"
if ! pkg-config --exists zlib >/dev/null 2>&1; then
# Either pkg-config or zlib itself wasn't found (Debian provide .pc file, Ubuntu doesn't)
# We have to check zlib existence manually.
echo | cpp -include zlib.h >/dev/null 2>&1 || missing="$missing zlib1g-dev"
fi
# check for things needed to build scratchbox2
for prog in automake autoconf make fakeroot realpath; do
$prog --version >/dev/null 2>&1 || missing="$missing $prog"
done
# check for dpkg-dev
if ! dpkg-architecture --version >/dev/null 2>&1; then
missing="$missing dpkg-dev"
fi
[ -z "$missing" ] || die "please install required packages: $missing"
mkdir -p "$BUILDDIR"
git rev-parse HEAD > "$BUILDDIR/versions"
# download stuff
while read name
do
srcfile="$BUILDDIR/$name.tar"
srcdir="$BUILDDIR/$name"
echo -n "Downloading $name... "
echo "Downloading $name" >> "$LOG"
rm -rf "$srcdir"
wget --no-check-certificate -P $BUILDDIR http://112.106.1.254/sbs/$name.tar
mkdir "$srcdir"
tar xf "$srcfile" -C "$srcdir" --touch
rm -f "$srcfile"
echo "done"
done <<END
scratchbox2
qemu
debootstrap
lutil
END
# build scratchbox2
echo -n "Building scratchbox2... "
(cd "$SB2DIR" && make clean > /dev/null 2>&1)
(cd "$SB2DIR" && ./autogen.sh && ./configure && make 2>&1 ) >> "$LOG" || die "scratchbox2 build failed"
echo "done"
echo -n "Installing scratchbox2... "
(cd "$SB2DIR" && make install prefix="$INSTALLDIR" 2>&1 ) >> "$LOG" || die "scratchbox2 install failed"
echo "done"
# build qemu
echo -n "Building qemu... "
(cd "$QEMUDIR" && make clean > /dev/null 2>&1)
(cd "$QEMUDIR" && ./configure --target-list=arm-linux-user,i386-linux-user --disable-blobs --disable-uuid && make 2>&1) >> "$LOG" || die "qemu build failed"
echo "done"
echo -n "Installing qemu... "
(cd "$QEMUDIR" && make install prefix="$INSTALLDIR" 2>&1 ) >> "$LOG" || die "qemu install failed"
echo "done"
# build lutil and related tools
echo -n "Building lutil... "
(cd "$LUTILDIR" && ./autogen.sh && make prefix=/) >> "$LOG" || die "failed to build lutil"
(cd "$LUTILDIR" && make install prefix=/ DESTDIR="$INSTALLDIR" 2>&1 ) >> "$LOG" || die "lutil install failed"
echo "done"
# install debootstrap
echo -n "Installing debootstrap... "
(cd "$DEBOOTDIR" && fakeroot make devices.tar.gz) >> "$LOG" || die "failed to build debootstrap"
mkdir -p "$INSTALLDIR"/share/debootstrap/scripts/
cp -fd "$DEBOOTDIR"/scripts/* "$INSTALLDIR"/share/debootstrap/scripts/
cp -f "$DEBOOTDIR"/functions "$INSTALLDIR"/share/debootstrap
cp -f "$DEBOOTDIR"/devices.tar.gz "$INSTALLDIR"/share/debootstrap
cp -f "$DEBOOTDIR"/debootstrap "$INSTALLDIR"/bin/debootstrap
echo "done"
# update the sbs binary
echo -n "Installing sbs scripts... "
if [ -e "$INSTALLDIR"/sbs.list ]; then
notice "removing old sbs installation files" >>"$LOG" 2>&1
sort -r "$INSTALLDIR"/sbs.list |
while read path; do
if [ -d "$INSTALLDIR/$path" ]
then
lx rmdir "$INSTALLDIR/$path" || true
else
lx rm "$INSTALLDIR/$path" || true
fi
done >>"$LOG" 2>&1
mv -f "$INSTALLDIR"/sbs.list "$INSTALLDIR"/sbs.list.old
fi
mkdir -p "$INSTALLDIR"
make install DESTDIR="$INSTALLDIR" prefix=/ >"$INSTALLDIR/sbs.list" 2>>$LOG || die "failed to install SBS"
echo "done"
# save the versions, to enable OSS license compliance
cp -f "$BUILDDIR"/versions "$INSTALLDIR"
SBS_ROOTDIR=${SBS_ROOTDIR:-$HOME/sbs}
if ! test -d "$SBS_ROOTDIR"
then
echo
echo "$CX""Run $INSTALLDIR/bin/sbs -c to create your initial environment$CN"
echo
else
echo
echo "$CX""SBS update successful$CN"
echo
fi
|