|
@@ -100,6 +100,13 @@ MIRROR='http://ftp.de.debian.org/debian'
|
100
|
100
|
# Whether to only install debian but nothing else
|
101
|
101
|
DEBIAN_INSTALL_ONLY='no'
|
102
|
102
|
|
|
103
|
+# wifi settings
|
|
104
|
+WIFI_INTERFACE='wlan0'
|
|
105
|
+WIFI_SSID=
|
|
106
|
+WIFI_TYPE='wpa-psk'
|
|
107
|
+WIFI_PASSPHRASE=
|
|
108
|
+WIFI_HOTSPOT='no'
|
|
109
|
+
|
103
|
110
|
mesh_router_setup_script() {
|
104
|
111
|
# create a setup script for a mesh router
|
105
|
112
|
mesh_script_filename=$1
|
|
@@ -220,24 +227,46 @@ do
|
220
|
227
|
shift
|
221
|
228
|
DEBIAN_INSTALL_ONLY="$1"
|
222
|
229
|
;;
|
223
|
|
- *)
|
224
|
|
- # unknown option
|
225
|
|
- ;;
|
226
|
|
- esac
|
227
|
|
- shift
|
|
230
|
+ --interface|--if)
|
|
231
|
+ shift
|
|
232
|
+ WIFI_INTERFACE="$1"
|
|
233
|
+ ;;
|
|
234
|
+ --ssid|--essid)
|
|
235
|
+ shift
|
|
236
|
+ WIFI_SSID="$1"
|
|
237
|
+ ;;
|
|
238
|
+ --wifitype)
|
|
239
|
+ shift
|
|
240
|
+ WIFI_TYPE="$1"
|
|
241
|
+ ;;
|
|
242
|
+ --wifipass|--passphrase)
|
|
243
|
+ shift
|
|
244
|
+ WIFI_PASSPHRASE="$1"
|
|
245
|
+ ;;
|
|
246
|
+ --hotspot)
|
|
247
|
+ shift
|
|
248
|
+ if [[ $"$1" == $'yes' || $"$1" == $'y' ]]; then
|
|
249
|
+ WIFI_HOTSPOT='yes'
|
|
250
|
+ fi
|
|
251
|
+ ;;
|
|
252
|
+ *)
|
|
253
|
+ # unknown option
|
|
254
|
+ ;;
|
|
255
|
+ esac
|
|
256
|
+ shift
|
228
|
257
|
done
|
229
|
258
|
|
230
|
259
|
if [[ $INTERACTIVE == "yes" || $INTERACTIVE == "y" || $INTERACTIVE == "Yes" ]]; then
|
231
|
|
- ${PROJECT_NAME}-config --minimal "$MINIMAL_INSTALL"
|
232
|
|
- if [ -f freedombone.cfg ]; then
|
233
|
|
- CONFIG_FILENAME=freedombone.cfg
|
234
|
|
- DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}')
|
235
|
|
- fi
|
|
260
|
+ ${PROJECT_NAME}-config --minimal "$MINIMAL_INSTALL"
|
|
261
|
+ if [ -f freedombone.cfg ]; then
|
|
262
|
+ CONFIG_FILENAME=freedombone.cfg
|
|
263
|
+ DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}')
|
|
264
|
+ fi
|
236
|
265
|
fi
|
237
|
266
|
|
238
|
267
|
if [[ $GENERIC_IMAGE == "yes" ]]; then
|
239
|
|
- USERNAME=$GENERIC_IMAGE_USERNAME
|
240
|
|
- PASSWORD=$GENERIC_IMAGE_PASSWORD
|
|
268
|
+ USERNAME=$GENERIC_IMAGE_USERNAME
|
|
269
|
+ PASSWORD=$GENERIC_IMAGE_PASSWORD
|
241
|
270
|
fi
|
242
|
271
|
|
243
|
272
|
# If this is a mesh variant then create an appropriate script
|
|
@@ -248,45 +277,45 @@ fi
|
248
|
277
|
#fi
|
249
|
278
|
|
250
|
279
|
if [ ! $PASSWORD ]; then
|
251
|
|
- # generate a random password
|
252
|
|
- PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
|
|
280
|
+ # generate a random password
|
|
281
|
+ PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
|
253
|
282
|
fi
|
254
|
283
|
|
255
|
284
|
# Move any existing images into a build subdirectory
|
256
|
285
|
image_types=( xz img sig vdi qcow2 )
|
257
|
286
|
for im in "${image_types[@]}"
|
258
|
287
|
do
|
259
|
|
- no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
|
260
|
|
- if (( no_of_files > 0 )); then
|
261
|
|
- if [ ! -d ${CURR_DIR}/build ]; then
|
262
|
|
- mkdir ${CURR_DIR}/build
|
263
|
|
- fi
|
264
|
|
- mv -f ${CURR_DIR}/${PROJECT_NAME}*.${im} ${CURR_DIR}/build
|
265
|
|
- fi
|
|
288
|
+ no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
|
|
289
|
+ if (( no_of_files > 0 )); then
|
|
290
|
+ if [ ! -d ${CURR_DIR}/build ]; then
|
|
291
|
+ mkdir ${CURR_DIR}/build
|
|
292
|
+ fi
|
|
293
|
+ mv -f ${CURR_DIR}/${PROJECT_NAME}*.${im} ${CURR_DIR}/build
|
|
294
|
+ fi
|
266
|
295
|
done
|
267
|
296
|
|
268
|
297
|
# Delete anything which didn't move
|
269
|
298
|
for im in "${image_types[@]}"
|
270
|
299
|
do
|
271
|
|
- no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
|
272
|
|
- if (( no_of_files > 0 )); then
|
273
|
|
- rm -f ${CURR_DIR}/${PROJECT_NAME}*.${im}
|
274
|
|
- fi
|
|
300
|
+ no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
|
|
301
|
+ if (( no_of_files > 0 )); then
|
|
302
|
+ rm -f ${CURR_DIR}/${PROJECT_NAME}*.${im}
|
|
303
|
+ fi
|
275
|
304
|
done
|
276
|
305
|
|
277
|
306
|
# Remove any existing login credentials file
|
278
|
307
|
if [ -f ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt ]; then
|
279
|
|
- rm ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
|
|
308
|
+ rm ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
|
280
|
309
|
fi
|
281
|
310
|
|
282
|
311
|
if [ -d $TEMPBUILD_DIR ]; then
|
283
|
|
- rm -rf $TEMPBUILD_DIR
|
|
312
|
+ rm -rf $TEMPBUILD_DIR
|
284
|
313
|
fi
|
285
|
314
|
mkdir -p $TEMPBUILD_DIR
|
286
|
315
|
if [ -f /usr/local/bin/$MAKEFILE ]; then
|
287
|
|
- cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
|
|
316
|
+ cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
|
288
|
317
|
else
|
289
|
|
- cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
|
|
318
|
+ cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
|
290
|
319
|
fi
|
291
|
320
|
|
292
|
321
|
cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR
|
|
@@ -295,64 +324,69 @@ chown -R $CURR_USER:$CURR_USER $TEMPBUILD_DIR
|
295
|
324
|
cd $TEMPBUILD_DIR
|
296
|
325
|
|
297
|
326
|
if [[ $MINIMAL_INSTALL == "yes" ]]; then
|
298
|
|
- IMAGE_NAME='min'
|
|
327
|
+ IMAGE_NAME='min'
|
299
|
328
|
fi
|
300
|
329
|
|
301
|
330
|
if [[ $ONION_ONLY != "no" ]]; then
|
302
|
|
- IMAGE_NAME='onion'
|
|
331
|
+ IMAGE_NAME='onion'
|
303
|
332
|
fi
|
304
|
333
|
|
305
|
334
|
cd $TEMPBUILD_DIR
|
306
|
335
|
make $IMAGE_TYPE \
|
307
|
|
- USERNAME="$USERNAME" \
|
308
|
|
- PASSWORD="$PASSWORD" \
|
309
|
|
- ROUTER_IP_ADDRESS="$ROUTER_IP_ADDRESS" \
|
310
|
|
- BOX_IP_ADDRESS="$BOX_IP_ADDRESS" \
|
311
|
|
- NAMESERVER1="$NAMESERVER1" \
|
312
|
|
- NAMESERVER2="$NAMESERVER2" \
|
313
|
|
- PROJECT_NAME="$PROJECT_NAME" \
|
314
|
|
- CONFIG_FILENAME="$CONFIG_FILENAME" \
|
315
|
|
- IMAGE_SIZE="$IMAGE_SIZE" \
|
316
|
|
- SSH_PUBKEY="$SSH_PUBKEY" \
|
317
|
|
- GENERIC_IMAGE="$GENERIC_IMAGE" \
|
318
|
|
- MINIMAL_INSTALL="$MINIMAL_INSTALL" \
|
319
|
|
- SSH_PORT="$SSH_PORT" \
|
320
|
|
- ONION_ONLY="$ONION_ONLY" \
|
321
|
|
- IMAGE_NAME="$IMAGE_NAME" \
|
322
|
|
- PROJECT_REPO="$PROJECT_REPO" \
|
323
|
|
- MIRROR="$MIRROR" \
|
324
|
|
- BUILD_MIRROR="$MIRROR" \
|
325
|
|
- DEBIAN_INSTALL_ONLY="$DEBIAN_INSTALL_ONLY"
|
326
|
|
-
|
|
336
|
+ USERNAME="$USERNAME" \
|
|
337
|
+ PASSWORD="$PASSWORD" \
|
|
338
|
+ ROUTER_IP_ADDRESS="$ROUTER_IP_ADDRESS" \
|
|
339
|
+ BOX_IP_ADDRESS="$BOX_IP_ADDRESS" \
|
|
340
|
+ NAMESERVER1="$NAMESERVER1" \
|
|
341
|
+ NAMESERVER2="$NAMESERVER2" \
|
|
342
|
+ PROJECT_NAME="$PROJECT_NAME" \
|
|
343
|
+ CONFIG_FILENAME="$CONFIG_FILENAME" \
|
|
344
|
+ IMAGE_SIZE="$IMAGE_SIZE" \
|
|
345
|
+ SSH_PUBKEY="$SSH_PUBKEY" \
|
|
346
|
+ GENERIC_IMAGE="$GENERIC_IMAGE" \
|
|
347
|
+ MINIMAL_INSTALL="$MINIMAL_INSTALL" \
|
|
348
|
+ SSH_PORT="$SSH_PORT" \
|
|
349
|
+ ONION_ONLY="$ONION_ONLY" \
|
|
350
|
+ IMAGE_NAME="$IMAGE_NAME" \
|
|
351
|
+ PROJECT_REPO="$PROJECT_REPO" \
|
|
352
|
+ MIRROR="$MIRROR" \
|
|
353
|
+ BUILD_MIRROR="$MIRROR" \
|
|
354
|
+ DEBIAN_INSTALL_ONLY="$DEBIAN_INSTALL_ONLY" \
|
|
355
|
+ WIFI_INTERFACE="$WIFI_INTERFACE" \
|
|
356
|
+ WIFI_SSID="$WIFI_SSID" \
|
|
357
|
+ WIFI_TYPE="$WIFI_TYPE" \
|
|
358
|
+ WIFI_PASSPHRASE="$WIFI_PASSPHRASE" \
|
|
359
|
+ WIFI_HOTSPOT="$WIFI_HOTSPOT"
|
|
360
|
+
|
327
|
361
|
if [ ! "$?" = "0" ]; then
|
328
|
|
- echo $'Build failed'
|
329
|
|
- rm -rf $TEMPBUILD_DIR
|
330
|
|
- exit 1
|
|
362
|
+ echo $'Build failed'
|
|
363
|
+ rm -rf $TEMPBUILD_DIR
|
|
364
|
+ exit 1
|
331
|
365
|
fi
|
332
|
366
|
|
333
|
367
|
EXPECTED_EXTENSION='xz'
|
334
|
368
|
if [[ $IMAGE_TYPE == "qemu"* ]]; then
|
335
|
|
- EXPECTED_EXTENSION='qcow2'
|
|
369
|
+ EXPECTED_EXTENSION='qcow2'
|
336
|
370
|
fi
|
337
|
371
|
if [[ $IMAGE_TYPE == "virtualbox"* ]]; then
|
338
|
|
- EXPECTED_EXTENSION='vdi'
|
|
372
|
+ EXPECTED_EXTENSION='vdi'
|
339
|
373
|
fi
|
340
|
374
|
|
341
|
375
|
shopt -s nullglob
|
342
|
376
|
imgfiles=(build/${PROJECT_NAME}*.${EXPECTED_EXTENSION})
|
343
|
377
|
if [ ${#imgfiles[@]} -eq 0 ]; then
|
344
|
|
- echo $'Image was not created'
|
345
|
|
- rm -rf $TEMPBUILD_DIR
|
346
|
|
- exit 2
|
|
378
|
+ echo $'Image was not created'
|
|
379
|
+ rm -rf $TEMPBUILD_DIR
|
|
380
|
+ exit 2
|
347
|
381
|
fi
|
348
|
382
|
|
349
|
383
|
# Move images from temporary directory to the current directory
|
350
|
384
|
for im in "${image_types[@]}"
|
351
|
385
|
do
|
352
|
|
- no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l)
|
353
|
|
- if (( no_of_files > 0 )); then
|
354
|
|
- mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
|
355
|
|
- fi
|
|
386
|
+ no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l)
|
|
387
|
+ if (( no_of_files > 0 )); then
|
|
388
|
+ mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
|
|
389
|
+ fi
|
356
|
390
|
done
|
357
|
391
|
|
358
|
392
|
# Remove the temporary directory
|
|
@@ -367,32 +401,32 @@ Image was created.
|
367
|
401
|
You will be able to log into it with:
|
368
|
402
|
"
|
369
|
403
|
if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then
|
370
|
|
- echo $" ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT
|
|
404
|
+ echo $" ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT
|
371
|
405
|
|
372
|
|
- Password: $PASSWORD
|
|
406
|
+Password: $PASSWORD
|
373
|
407
|
"
|
374
|
408
|
else
|
375
|
|
- if [[ $IMAGE_TYPE != "qemu"* ]]; then
|
376
|
|
- echo $" Username: $USERNAME
|
377
|
|
- Password: $PASSWORD
|
|
409
|
+ if [[ $IMAGE_TYPE != "qemu"* ]]; then
|
|
410
|
+ echo $" Username: $USERNAME
|
|
411
|
+Password: $PASSWORD
|
378
|
412
|
"
|
379
|
|
- else
|
380
|
|
- if [[ $IMAGE_TYPE != "qemu-x86_64"* && $IMAGE_TYPE != "qemu-amd64"* ]]; then
|
381
|
|
- echo "qemu-system-i386 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
|
382
|
|
- else
|
383
|
|
- echo "qemu-system-x86_64 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
|
384
|
|
- fi
|
385
|
|
- echo $"
|
386
|
|
- Username: $USERNAME
|
387
|
|
- Password: $PASSWORD
|
|
413
|
+ else
|
|
414
|
+ if [[ $IMAGE_TYPE != "qemu-x86_64"* && $IMAGE_TYPE != "qemu-amd64"* ]]; then
|
|
415
|
+ echo "qemu-system-i386 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
|
|
416
|
+ else
|
|
417
|
+ echo "qemu-system-x86_64 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
|
|
418
|
+ fi
|
|
419
|
+ echo $"
|
|
420
|
+Username: $USERNAME
|
|
421
|
+Password: $PASSWORD
|
388
|
422
|
"
|
389
|
|
- fi
|
|
423
|
+ fi
|
390
|
424
|
fi
|
391
|
425
|
ls -lh ${PROJECT_NAME}*.img ${PROJECT_NAME}*.sig ${PROJECT_NAME}*.xz ${PROJECT_NAME}*.vdi ${PROJECT_NAME}*.qcow2
|
392
|
426
|
|
393
|
427
|
# Remove the mesh script after use
|
394
|
428
|
if [[ $VARIANT == "mesh"* ]]; then
|
395
|
|
- rm -f $CONFIG_FILENAME
|
|
429
|
+ rm -f $CONFIG_FILENAME
|
396
|
430
|
fi
|
397
|
431
|
|
398
|
432
|
# record the default login credentials for later use
|
|
@@ -401,12 +435,12 @@ Password: $PASSWORD" > ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
|
401
|
435
|
chmod 600 ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
|
402
|
436
|
|
403
|
437
|
if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then
|
404
|
|
- echo ''
|
405
|
|
- echo $'You can copy the image to a microSD card with:'
|
406
|
|
- echo ''
|
407
|
|
- echo " unxz -k ${PROJECT_NAME}*.img.xz"
|
408
|
|
- echo " sudo dd bs=1M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync"
|
409
|
|
- echo ''
|
|
438
|
+ echo ''
|
|
439
|
+ echo $'You can copy the image to a microSD card with:'
|
|
440
|
+ echo ''
|
|
441
|
+ echo " unxz -k ${PROJECT_NAME}*.img.xz"
|
|
442
|
+ echo " sudo dd bs=1M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync"
|
|
443
|
+ echo ''
|
410
|
444
|
fi
|
411
|
445
|
|
412
|
446
|
exit 0
|