Преглед изворни кода

Debian only image creation

Bob Mottram пре 9 година
родитељ
комит
bb8b0c9c2d
4 измењених фајлова са 281 додато и 265 уклоњено
  1. BIN
      man/freedombone-image.1.gz
  2. 178
    170
      src/freedombone-image
  3. 60
    54
      src/freedombone-image-customise
  4. 43
    41
      src/freedombone-image-make

BIN
man/freedombone-image.1.gz Прегледај датотеку


+ 178
- 170
src/freedombone-image Прегледај датотеку

97
 #MIRROR='http://httpredir.debian.org/debian'
97
 #MIRROR='http://httpredir.debian.org/debian'
98
 MIRROR='http://ftp.de.debian.org/debian'
98
 MIRROR='http://ftp.de.debian.org/debian'
99
 
99
 
100
+# Whether to only install debian but nothing else
101
+DEBIAN_INSTALL_ONLY='no'
102
+
100
 mesh_router_setup_script() {
103
 mesh_router_setup_script() {
101
     # create a setup script for a mesh router
104
     # create a setup script for a mesh router
102
     mesh_script_filename=$1
105
     mesh_script_filename=$1
122
 
125
 
123
 while [[ $# > 1 ]]
126
 while [[ $# > 1 ]]
124
 do
127
 do
125
-	key="$1"
126
-
127
-	case $key in
128
-		-h|--help)
129
-			show_help
130
-			;;
131
-		-c|--config)
132
-			shift
133
-			CONFIG_FILENAME="$1"
134
-			if [ ! -f $CONFIG_FILENAME ]; then
135
-				echo $"Config file $CONFIG_FILENAME not found"
136
-				exit 3
137
-			fi
138
-			DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}')
139
-			;;
140
-		-t|--target|--board)
141
-			shift
142
-			IMAGE_TYPE="$1"
143
-			;;
144
-		-u|--user|--username)
145
-			shift
146
-			USERNAME="$1"
147
-			;;
148
-		-p|--password)
149
-			shift
150
-			PASSWORD="$1"
151
-			if [ ${#PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
152
-				echo $"Your password chould contain at least ${MINIMUM_PASSWORD_LENGTH} characters"
153
-				exit 3628
154
-			fi
155
-			;;
156
-		--sshkey|--sshpubkey|--pubkey)
157
-			shift
158
-			SSH_PUBKEY="$1"
159
-			;;
160
-		-s|--size)
161
-			shift
162
-			IMAGE_SIZE="$1"
163
-			;;
164
-		# Box static IP address on the LAN
165
-		--ip)
166
-			shift
167
-			BOX_IP_ADDRESS="$1"
168
-			;;
169
-		# Router IP address on the LAN
170
-		--iprouter)
171
-			shift
172
-			ROUTER_IP_ADDRESS="$1"
173
-			;;
174
-		# nameserver 1
175
-		--ns1|--nameserver1)
176
-			shift
177
-			NAMESERVER1="$1"
178
-			;;
179
-		# nameserver 2
180
-		--ns2|--nameserver2)
181
-			shift
182
-			NAMESERVER2="$1"
183
-			;;
184
-		-i|--interactive)
185
-			shift
186
-			INTERACTIVE="$1"
187
-			;;
188
-		-g|--generic)
189
-			shift
190
-			GENERIC_IMAGE="$1"
191
-			;;
192
-		--minimal)
193
-			shift
194
-			MINIMAL_INSTALL="$1"
195
-			;;
196
-		--ssh|--sshport)
197
-			shift
198
-			SSH_PORT="$1"
199
-			;;
200
-		-v|--variant)
201
-			shift
202
-			VARIANT="$1"
203
-			;;
204
-		-o|--onion)
205
-			shift
206
-			ONION_ONLY="$1"
207
-			;;
208
-		-r|--repo|--repository)
209
-			shift
210
-			PROJECT_REPO="$1"
211
-			;;
212
-		-m|--mirror)
213
-			shift
214
-			MIRROR="$1"
215
-			;;
216
-		*)
217
-			# unknown option
218
-			;;
219
-	esac
220
-	shift
128
+    key="$1"
129
+
130
+    case $key in
131
+        -h|--help)
132
+            show_help
133
+            ;;
134
+        -c|--config)
135
+            shift
136
+            CONFIG_FILENAME="$1"
137
+            if [ ! -f $CONFIG_FILENAME ]; then
138
+                echo $"Config file $CONFIG_FILENAME not found"
139
+                exit 3
140
+            fi
141
+            DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}')
142
+            ;;
143
+        -t|--target|--board)
144
+            shift
145
+            IMAGE_TYPE="$1"
146
+            ;;
147
+        -u|--user|--username)
148
+            shift
149
+            USERNAME="$1"
150
+            ;;
151
+        -p|--password)
152
+            shift
153
+            PASSWORD="$1"
154
+            if [ ${#PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
155
+                echo $"Your password chould contain at least ${MINIMUM_PASSWORD_LENGTH} characters"
156
+                exit 3628
157
+            fi
158
+            ;;
159
+        --sshkey|--sshpubkey|--pubkey)
160
+            shift
161
+            SSH_PUBKEY="$1"
162
+            ;;
163
+        -s|--size)
164
+            shift
165
+            IMAGE_SIZE="$1"
166
+            ;;
167
+        # Box static IP address on the LAN
168
+        --ip)
169
+            shift
170
+            BOX_IP_ADDRESS="$1"
171
+            ;;
172
+        # Router IP address on the LAN
173
+        --iprouter)
174
+            shift
175
+            ROUTER_IP_ADDRESS="$1"
176
+            ;;
177
+        # nameserver 1
178
+        --ns1|--nameserver1)
179
+            shift
180
+            NAMESERVER1="$1"
181
+            ;;
182
+        # nameserver 2
183
+        --ns2|--nameserver2)
184
+            shift
185
+            NAMESERVER2="$1"
186
+            ;;
187
+        -i|--interactive)
188
+            shift
189
+            INTERACTIVE="$1"
190
+            ;;
191
+        -g|--generic)
192
+            shift
193
+            GENERIC_IMAGE="$1"
194
+            ;;
195
+        --minimal)
196
+            shift
197
+            MINIMAL_INSTALL="$1"
198
+            ;;
199
+        --ssh|--sshport)
200
+            shift
201
+            SSH_PORT="$1"
202
+            ;;
203
+        -v|--variant)
204
+            shift
205
+            VARIANT="$1"
206
+            ;;
207
+        -o|--onion)
208
+            shift
209
+            ONION_ONLY="$1"
210
+            ;;
211
+        -r|--repo|--repository)
212
+            shift
213
+            PROJECT_REPO="$1"
214
+            ;;
215
+        -m|--mirror)
216
+            shift
217
+            MIRROR="$1"
218
+            ;;
219
+        --debianonly|--basic|--minimal)
220
+            shift
221
+            DEBIAN_INSTALL_ONLY="$1"
222
+            ;;
223
+        *)
224
+            # unknown option
225
+            ;;
226
+    esac
227
+    shift
221
 done
228
 done
222
 
229
 
223
 if [[ $INTERACTIVE == "yes" || $INTERACTIVE == "y" || $INTERACTIVE == "Yes" ]]; then
230
 if [[ $INTERACTIVE == "yes" || $INTERACTIVE == "y" || $INTERACTIVE == "Yes" ]]; then
224
-	${PROJECT_NAME}-config --minimal "$MINIMAL_INSTALL"
225
-	if [ -f freedombone.cfg ]; then
226
-		CONFIG_FILENAME=freedombone.cfg
227
-		DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}')
228
-	fi
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
229
 fi
236
 fi
230
 
237
 
231
 if [[ $GENERIC_IMAGE == "yes" ]]; then
238
 if [[ $GENERIC_IMAGE == "yes" ]]; then
232
-	USERNAME=$GENERIC_IMAGE_USERNAME
233
-	PASSWORD=$GENERIC_IMAGE_PASSWORD
239
+    USERNAME=$GENERIC_IMAGE_USERNAME
240
+    PASSWORD=$GENERIC_IMAGE_PASSWORD
234
 fi
241
 fi
235
 
242
 
236
 # If this is a mesh variant then create an appropriate script
243
 # If this is a mesh variant then create an appropriate script
241
 #fi
248
 #fi
242
 
249
 
243
 if [ ! $PASSWORD ]; then
250
 if [ ! $PASSWORD ]; then
244
-	# generate a random password
245
-	PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
251
+    # generate a random password
252
+    PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
246
 fi
253
 fi
247
 
254
 
248
 # Move any existing images into a build subdirectory
255
 # Move any existing images into a build subdirectory
249
 image_types=( xz img sig vdi qcow2 )
256
 image_types=( xz img sig vdi qcow2 )
250
 for im in "${image_types[@]}"
257
 for im in "${image_types[@]}"
251
 do
258
 do
252
-	no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
253
-	if (( no_of_files > 0 )); then
254
-		if [ ! -d ${CURR_DIR}/build ]; then
255
-			mkdir ${CURR_DIR}/build
256
-		fi
257
-		mv -f ${CURR_DIR}/${PROJECT_NAME}*.${im} ${CURR_DIR}/build
258
-	fi
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
259
 done
266
 done
260
 
267
 
261
 # Delete anything which didn't move
268
 # Delete anything which didn't move
262
 for im in "${image_types[@]}"
269
 for im in "${image_types[@]}"
263
 do
270
 do
264
-	no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
265
-	if (( no_of_files > 0 )); then
266
-		rm -f ${CURR_DIR}/${PROJECT_NAME}*.${im}
267
-	fi
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
268
 done
275
 done
269
 
276
 
270
 # Remove any existing login credentials file
277
 # Remove any existing login credentials file
271
 if [ -f ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt ]; then
278
 if [ -f ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt ]; then
272
-	rm ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
279
+    rm ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
273
 fi
280
 fi
274
 
281
 
275
 if [ -d $TEMPBUILD_DIR ]; then
282
 if [ -d $TEMPBUILD_DIR ]; then
276
-	rm -rf $TEMPBUILD_DIR
283
+    rm -rf $TEMPBUILD_DIR
277
 fi
284
 fi
278
 mkdir -p $TEMPBUILD_DIR
285
 mkdir -p $TEMPBUILD_DIR
279
 if [ -f /usr/local/bin/$MAKEFILE ]; then
286
 if [ -f /usr/local/bin/$MAKEFILE ]; then
280
-	cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
287
+    cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
281
 else
288
 else
282
-	cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
289
+    cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
283
 fi
290
 fi
284
 
291
 
285
 cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR
292
 cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR
288
 cd $TEMPBUILD_DIR
295
 cd $TEMPBUILD_DIR
289
 
296
 
290
 if [[ $MINIMAL_INSTALL == "yes" ]]; then
297
 if [[ $MINIMAL_INSTALL == "yes" ]]; then
291
-	IMAGE_NAME='min'
298
+    IMAGE_NAME='min'
292
 fi
299
 fi
293
 
300
 
294
 if [[ $ONION_ONLY != "no" ]]; then
301
 if [[ $ONION_ONLY != "no" ]]; then
295
-	IMAGE_NAME='onion'
302
+    IMAGE_NAME='onion'
296
 fi
303
 fi
297
 
304
 
298
 cd $TEMPBUILD_DIR
305
 cd $TEMPBUILD_DIR
299
 make $IMAGE_TYPE \
306
 make $IMAGE_TYPE \
300
-	 USERNAME="$USERNAME" \
301
-	 PASSWORD="$PASSWORD" \
302
-	 ROUTER_IP_ADDRESS="$ROUTER_IP_ADDRESS" \
303
-	 BOX_IP_ADDRESS="$BOX_IP_ADDRESS" \
304
-	 NAMESERVER1="$NAMESERVER1" \
305
-	 NAMESERVER2="$NAMESERVER2" \
306
-	 PROJECT_NAME="$PROJECT_NAME" \
307
-	 CONFIG_FILENAME="$CONFIG_FILENAME" \
308
-	 IMAGE_SIZE="$IMAGE_SIZE" \
309
-	 SSH_PUBKEY="$SSH_PUBKEY" \
310
-	 GENERIC_IMAGE="$GENERIC_IMAGE" \
311
-	 MINIMAL_INSTALL="$MINIMAL_INSTALL" \
312
-	 SSH_PORT="$SSH_PORT" \
313
-	 ONION_ONLY="$ONION_ONLY" \
314
-	 IMAGE_NAME="$IMAGE_NAME" \
315
-	 PROJECT_REPO="$PROJECT_REPO" \
316
-	 MIRROR="$MIRROR" \
317
-	 BUILD_MIRROR="$MIRROR"
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"
318
 
326
 
319
 if [ ! "$?" = "0" ]; then
327
 if [ ! "$?" = "0" ]; then
320
-	echo $'Build failed'
321
-	rm -rf $TEMPBUILD_DIR
322
-	exit 1
328
+    echo $'Build failed'
329
+    rm -rf $TEMPBUILD_DIR
330
+    exit 1
323
 fi
331
 fi
324
 
332
 
325
 EXPECTED_EXTENSION='xz'
333
 EXPECTED_EXTENSION='xz'
326
 if [[ $IMAGE_TYPE == "qemu"* ]]; then
334
 if [[ $IMAGE_TYPE == "qemu"* ]]; then
327
-	EXPECTED_EXTENSION='qcow2'
335
+    EXPECTED_EXTENSION='qcow2'
328
 fi
336
 fi
329
 if [[ $IMAGE_TYPE == "virtualbox"* ]]; then
337
 if [[ $IMAGE_TYPE == "virtualbox"* ]]; then
330
-	EXPECTED_EXTENSION='vdi'
338
+    EXPECTED_EXTENSION='vdi'
331
 fi
339
 fi
332
 
340
 
333
 shopt -s nullglob
341
 shopt -s nullglob
334
 imgfiles=(build/${PROJECT_NAME}*.${EXPECTED_EXTENSION})
342
 imgfiles=(build/${PROJECT_NAME}*.${EXPECTED_EXTENSION})
335
 if [ ${#imgfiles[@]} -eq 0 ]; then
343
 if [ ${#imgfiles[@]} -eq 0 ]; then
336
-	echo $'Image was not created'
337
-	rm -rf $TEMPBUILD_DIR
338
-	exit 2
344
+    echo $'Image was not created'
345
+    rm -rf $TEMPBUILD_DIR
346
+    exit 2
339
 fi
347
 fi
340
 
348
 
341
 # Move images from temporary directory to the current directory
349
 # Move images from temporary directory to the current directory
342
 for im in "${image_types[@]}"
350
 for im in "${image_types[@]}"
343
 do
351
 do
344
-	no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l)
345
-	if (( no_of_files > 0 )); then
346
-		mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
347
-	fi
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
348
 done
356
 done
349
 
357
 
350
 # Remove the temporary directory
358
 # Remove the temporary directory
359
 You will be able to log into it with:
367
 You will be able to log into it with:
360
 "
368
 "
361
 if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then
369
 if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then
362
-	echo $"    ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT
370
+    echo $"    ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT
363
 
371
 
364
     Password: $PASSWORD
372
     Password: $PASSWORD
365
 "
373
 "
366
 else
374
 else
367
-	if [[ $IMAGE_TYPE != "qemu"* ]]; then
368
-		echo $"    Username: $USERNAME
375
+    if [[ $IMAGE_TYPE != "qemu"* ]]; then
376
+        echo $"    Username: $USERNAME
369
     Password: $PASSWORD
377
     Password: $PASSWORD
370
 "
378
 "
371
-	else
372
-		if [[ $IMAGE_TYPE != "qemu-x86_64"* && $IMAGE_TYPE != "qemu-amd64"* ]]; then
373
-			echo "qemu-system-i386 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
374
-		else
375
-			echo "qemu-system-x86_64 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
376
-		fi
377
-		echo $"
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 $"
378
     Username: $USERNAME
386
     Username: $USERNAME
379
     Password: $PASSWORD
387
     Password: $PASSWORD
380
 "
388
 "
381
-	fi
389
+    fi
382
 fi
390
 fi
383
 ls -lh ${PROJECT_NAME}*.img ${PROJECT_NAME}*.sig ${PROJECT_NAME}*.xz ${PROJECT_NAME}*.vdi ${PROJECT_NAME}*.qcow2
391
 ls -lh ${PROJECT_NAME}*.img ${PROJECT_NAME}*.sig ${PROJECT_NAME}*.xz ${PROJECT_NAME}*.vdi ${PROJECT_NAME}*.qcow2
384
 
392
 
385
 # Remove the mesh script after use
393
 # Remove the mesh script after use
386
 if [[ $VARIANT == "mesh"* ]]; then
394
 if [[ $VARIANT == "mesh"* ]]; then
387
-	rm -f $CONFIG_FILENAME
395
+    rm -f $CONFIG_FILENAME
388
 fi
396
 fi
389
 
397
 
390
 # record the default login credentials for later use
398
 # record the default login credentials for later use
393
 chmod 600 ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
401
 chmod 600 ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt
394
 
402
 
395
 if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then
403
 if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then
396
-	echo ''
397
-	echo $'You can copy the image to a microSD card with:'
398
-	echo ''
399
-	echo "    unxz -k ${PROJECT_NAME}*.img.xz"
400
-	echo "    sudo dd bs=1M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync"
401
-	echo ''
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 ''
402
 fi
410
 fi
403
 
411
 
404
 exit 0
412
 exit 0

+ 60
- 54
src/freedombone-image-customise Прегледај датотеку

75
 # Whether sites are accessible only within a Tor browser
75
 # Whether sites are accessible only within a Tor browser
76
 ONION_ONLY="no"
76
 ONION_ONLY="no"
77
 
77
 
78
+# Whether to only install debian and nothing else
79
+DEBIAN_INSTALL_ONLY="no"
80
+
78
 WIFI_INTERFACE='wlan0'
81
 WIFI_INTERFACE='wlan0'
79
 
82
 
80
 enable_eatmydata_override() {
83
 enable_eatmydata_override() {
81
     chroot $rootdir apt-get install --no-install-recommends -y eatmydata
84
     chroot $rootdir apt-get install --no-install-recommends -y eatmydata
82
     if [ -x $rootdir/usr/bin/eatmydata ] && \
85
     if [ -x $rootdir/usr/bin/eatmydata ] && \
83
-        [ ! -f $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata ]; then
86
+           [ ! -f $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata ]; then
84
         echo $"info: Adding apt config to call dpkg via eatmydata"
87
         echo $"info: Adding apt config to call dpkg via eatmydata"
85
         printf "#!/bin/sh\nexec eatmydata dpkg \"\$@\"\n" \
88
         printf "#!/bin/sh\nexec eatmydata dpkg \"\$@\"\n" \
86
-            > $rootdir/var/tmp/dpkg-eatmydata
89
+               > $rootdir/var/tmp/dpkg-eatmydata
87
         chmod 755 $rootdir/var/tmp/dpkg-eatmydata
90
         chmod 755 $rootdir/var/tmp/dpkg-eatmydata
88
         cat > $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata <<EOF
91
         cat > $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata <<EOF
89
 Dir::Bin::dpkg "/var/tmp/dpkg-eatmydata";
92
 Dir::Bin::dpkg "/var/tmp/dpkg-eatmydata";
96
 disable_eatmydata_override() {
99
 disable_eatmydata_override() {
97
     for override in \
100
     for override in \
98
         /etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata \
101
         /etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata \
99
-        /var/tmp/dpkg-eatmydata ; do
102
+            /var/tmp/dpkg-eatmydata ; do
100
         echo $"info: Removing apt config to call dpkg via eatmydata"
103
         echo $"info: Removing apt config to call dpkg via eatmydata"
101
         if [ -f $rootdir$override ] ; then
104
         if [ -f $rootdir$override ] ; then
102
             rm -f $rootdir$override
105
             rm -f $rootdir$override
136
     netmask 255.255.255.0
139
     netmask 255.255.255.0
137
     gateway $ROUTER_IP_ADDRESS
140
     gateway $ROUTER_IP_ADDRESS
138
     dns-nameservers $NAMESERVER1 $NAMESERVER2
141
     dns-nameservers $NAMESERVER1 $NAMESERVER2
139
-# Example to keep MAC address between reboots
140
-#hwaddress ether B5:A2:BE:3F:1A:FE
141
-
142
-# The secondary network interface
143
-#auto eth1
144
-#iface eth1 inet dhcp
145
-
146
-# WiFi Example
147
-#auto wlan0
148
-#iface wlan0 inet dhcp
149
-#    wpa-ssid \"essid\"
150
-#    wpa-psk  \"password\"
151
-
152
-# Ethernet/RNDIS gadget (g_ether)
153
-# ... or on host side, usbnet and random hwaddr
154
-# Note on some boards, usb0 is automaticly setup with an init script
155
-#iface usb0 inet static
156
-#    address 192.168.7.2
157
-#    netmask 255.255.255.0
158
-#    network 192.168.7.0
159
-#    gateway 192.168.7.1" > $rootdir/etc/network/interfaces
142
+        # Example to keep MAC address between reboots
143
+        #hwaddress ether B5:A2:BE:3F:1A:FE
144
+
145
+        # The secondary network interface
146
+        #auto eth1
147
+        #iface eth1 inet dhcp
148
+
149
+        # WiFi Example
150
+        #auto wlan0
151
+        #iface wlan0 inet dhcp
152
+        #    wpa-ssid \"essid\"
153
+        #    wpa-psk  \"password\"
154
+
155
+        # Ethernet/RNDIS gadget (g_ether)
156
+        # ... or on host side, usbnet and random hwaddr
157
+        # Note on some boards, usb0 is automaticly setup with an init script
158
+        #iface usb0 inet static
159
+        #    address 192.168.7.2
160
+        #    netmask 255.255.255.0
161
+        #    network 192.168.7.0
162
+        #    gateway 192.168.7.1" > $rootdir/etc/network/interfaces
160
 
163
 
161
         hexarray=( 1 2 3 4 5 6 7 8 9 0 a b c d e f )
164
         hexarray=( 1 2 3 4 5 6 7 8 9 0 a b c d e f )
162
         a=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]}
165
         a=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]}
211
 }
214
 }
212
 
215
 
213
 create_generic_image() {
216
 create_generic_image() {
217
+    if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then
218
+        return
219
+    fi  
214
     if [[ $GENERIC_IMAGE == "no" ]]; then
220
     if [[ $GENERIC_IMAGE == "no" ]]; then
215
         return
221
         return
216
     fi
222
     fi
380
 
386
 
381
 
387
 
382
 initialise_mesh() {
388
 initialise_mesh() {
383
-    if [[ $VARIANT != "mesh" ]]; then
389
+    if [[ $VARIANT != "mesh" || $DEBIAN_INSTALL_ONLY != "no" ]]; then
384
         return
390
         return
385
     fi
391
     fi
386
     freedombone-mesh-install -f firewall -r "${rootdir}"
392
     freedombone-mesh-install -f firewall -r "${rootdir}"
387
-	freedombone-mesh-install -f avahi -r "${rootdir}"
388
-	freedombone-mesh-install -f batman -r "${rootdir}"
389
-	freedombone-mesh-install -f tox_node -r "${rootdir}"
390
-	freedombone-mesh-install -f tox_client -r "${rootdir}"
391
-	freedombone-mesh-install -f zeronet -r "${rootdir}"
392
-
393
-	MESH_SERVICE='mesh-setup.service'
394
-	MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
395
-
396
-	echo '[Unit]' > $MESH_SETUP_DAEMON
397
-	echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON
398
-	echo 'After=syslog.target' >> $MESH_SETUP_DAEMON
399
-	echo 'After=network.target' >> $MESH_SETUP_DAEMON
400
-	echo '[Service]' >> $MESH_SETUP_DAEMON
401
-	echo 'Type=simple' >> $MESH_SETUP_DAEMON
402
-	echo 'User=root' >> $MESH_SETUP_DAEMON
403
-	echo 'Group=root' >> $MESH_SETUP_DAEMON
404
-	echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON
405
-	echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON
406
-	echo '' >> $MESH_SETUP_DAEMON
407
-	echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON
408
-	echo '' >> $MESH_SETUP_DAEMON
409
-	echo '[Install]' >> $MESH_SETUP_DAEMON
410
-	echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON
411
-	chroot "$rootdir" systemctl enable $MESH_SERVICE
393
+    freedombone-mesh-install -f avahi -r "${rootdir}"
394
+    freedombone-mesh-install -f batman -r "${rootdir}"
395
+    freedombone-mesh-install -f tox_node -r "${rootdir}"
396
+    freedombone-mesh-install -f tox_client -r "${rootdir}"
397
+    freedombone-mesh-install -f zeronet -r "${rootdir}"
398
+
399
+    MESH_SERVICE='mesh-setup.service'
400
+    MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
401
+
402
+    echo '[Unit]' > $MESH_SETUP_DAEMON
403
+    echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON
404
+    echo 'After=syslog.target' >> $MESH_SETUP_DAEMON
405
+    echo 'After=network.target' >> $MESH_SETUP_DAEMON
406
+    echo '[Service]' >> $MESH_SETUP_DAEMON
407
+    echo 'Type=simple' >> $MESH_SETUP_DAEMON
408
+    echo 'User=root' >> $MESH_SETUP_DAEMON
409
+    echo 'Group=root' >> $MESH_SETUP_DAEMON
410
+    echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON
411
+    echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON
412
+    echo '' >> $MESH_SETUP_DAEMON
413
+    echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON
414
+    echo '' >> $MESH_SETUP_DAEMON
415
+    echo '[Install]' >> $MESH_SETUP_DAEMON
416
+    echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON
417
+    chroot "$rootdir" systemctl enable $MESH_SERVICE
412
 }
418
 }
413
 
419
 
414
 # Set to true/false to control if eatmydata is used during build
420
 # Set to true/false to control if eatmydata is used during build
502
 case "$MACHINE" in
508
 case "$MACHINE" in
503
     beaglebone)
509
     beaglebone)
504
         dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/MLO of="$image" \
510
         dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/MLO of="$image" \
505
-		   count=1 seek=1 conv=notrunc bs=128k
511
+           count=1 seek=1 conv=notrunc bs=128k
506
         dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/u-boot.img of="$image" \
512
         dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/u-boot.img of="$image" \
507
-		   count=2 seek=1 conv=notrunc bs=384k
513
+           count=2 seek=1 conv=notrunc bs=384k
508
         ;;
514
         ;;
509
     cubieboard2)
515
     cubieboard2)
510
         dd if=$rootdir/usr/lib/u-boot/Cubieboard2/u-boot-sunxi-with-spl.bin of="$image" \
516
         dd if=$rootdir/usr/lib/u-boot/Cubieboard2/u-boot-sunxi-with-spl.bin of="$image" \
511
-		   seek=8 conv=notrunc bs=1k
517
+           seek=8 conv=notrunc bs=1k
512
         ;;
518
         ;;
513
     a20-olinuxino-lime)
519
     a20-olinuxino-lime)
514
         dd if=$rootdir/usr/lib/u-boot/A20-OLinuXino-Lime/u-boot-sunxi-with-spl.bin \
520
         dd if=$rootdir/usr/lib/u-boot/A20-OLinuXino-Lime/u-boot-sunxi-with-spl.bin \
515
-		   of="$image" seek=8 conv=notrunc bs=1k
521
+           of="$image" seek=8 conv=notrunc bs=1k
516
         ;;
522
         ;;
517
 esac
523
 esac
518
 
524
 

+ 43
- 41
src/freedombone-image-make Прегледај датотеку

55
 export SSH_PORT
55
 export SSH_PORT
56
 export ONION_ONLY
56
 export ONION_ONLY
57
 export PROJECT_REPO
57
 export PROJECT_REPO
58
+export DEBIAN_INSTALL_ONLY
58
 
59
 
59
 # Locate vmdebootstrap program fetched in Makefile
60
 # Locate vmdebootstrap program fetched in Makefile
60
 basedir=`pwd`
61
 basedir=`pwd`
83
 
84
 
84
 case "$MACHINE" in
85
 case "$MACHINE" in
85
     beaglebone)
86
     beaglebone)
86
-    extra_pkgs="$beaglebone_pkgs"
87
-    extra_opts="\
87
+		extra_pkgs="$beaglebone_pkgs"
88
+		extra_opts="\
88
  --variant minbase \
89
  --variant minbase \
89
  --bootoffset=2mib \
90
  --bootoffset=2mib \
90
  --bootsize 128M \
91
  --bootsize 128M \
94
  --foreign /usr/bin/qemu-arm-static \
95
  --foreign /usr/bin/qemu-arm-static \
95
  --roottype btrfs \
96
  --roottype btrfs \
96
 "
97
 "
97
-    ;;
98
+		;;
98
     cubietruck | a20-olinuxino-lime | a20-olinuxino-lime2 | a20-olinuxino-micro | cubieboard2)
99
     cubietruck | a20-olinuxino-lime | a20-olinuxino-lime2 | a20-olinuxino-micro | cubieboard2)
99
-       extra_pkgs="$a20_pkgs"
100
-       extra_opts="\
100
+		extra_pkgs="$a20_pkgs"
101
+		extra_opts="\
101
  --variant minbase \
102
  --variant minbase \
102
  --bootoffset=1mib \
103
  --bootoffset=1mib \
103
  --bootsize 128M \
104
  --bootsize 128M \
107
  --foreign /usr/bin/qemu-arm-static \
108
  --foreign /usr/bin/qemu-arm-static \
108
  --roottype btrfs \
109
  --roottype btrfs \
109
 "
110
 "
110
-       ;;
111
+		;;
111
     virtualbox)
112
     virtualbox)
112
-    extra_opts="\
113
+		extra_opts="\
113
  --grub \
114
  --grub \
114
  --roottype btrfs \
115
  --roottype btrfs \
115
 "   ;;
116
 "   ;;
116
     qemu)
117
     qemu)
117
-    extra_opts="\
118
+		extra_opts="\
118
  --grub \
119
  --grub \
119
  --roottype btrfs \
120
  --roottype btrfs \
120
 "   ;;
121
 "   ;;
121
-    all)
122
-    extra_opts="\
122
+	all)
123
+		extra_opts="\
123
  --grub \
124
  --grub \
124
  --roottype btrfs \
125
  --roottype btrfs \
125
 "   ;;
126
 "   ;;
128
 # allow for lots of extra fun customization options.
129
 # allow for lots of extra fun customization options.
129
 for customization in $CUSTOMIZATIONS
130
 for customization in $CUSTOMIZATIONS
130
 do
131
 do
131
-    case "$customization" in
132
-        development)
133
-            extra_pkgs="$extra_pkgs $dev_pkgs"
134
-            ;;
135
-    esac
132
+	case "$customization" in
133
+		development)
134
+			extra_pkgs="$extra_pkgs $dev_pkgs"
135
+			;;
136
+	esac
136
 done
137
 done
137
 
138
 
138
 for p in $base_pkgs $extra_pkgs; do
139
 for p in $base_pkgs $extra_pkgs; do
139
-    pkgopts="$pkgopts --package $p"
140
+	pkgopts="$pkgopts --package $p"
140
 done
141
 done
141
 
142
 
142
 # Make sure file is owned by current user, not root
143
 # Make sure file is owned by current user, not root
143
 touch $(dirname $IMAGE)/${PROJECT_NAME}.log
144
 touch $(dirname $IMAGE)/${PROJECT_NAME}.log
144
 
145
 
145
 if [ -x vendor/vmdebootstrap/vmdebootstrap ] ; then
146
 if [ -x vendor/vmdebootstrap/vmdebootstrap ] ; then
146
-    VMDEBOOTSTRAP=vendor/vmdebootstrap/vmdebootstrap
147
+	VMDEBOOTSTRAP=vendor/vmdebootstrap/vmdebootstrap
147
 else
148
 else
148
-    VMDEBOOTSTRAP=vmdebootstrap
149
+	VMDEBOOTSTRAP=vmdebootstrap
149
 fi
150
 fi
150
 
151
 
151
 echo $'Making customised customisation script'
152
 echo $'Making customised customisation script'
152
 TEMP_CUSTOMISE=/etc/${PROJECT_NAME}/image-customise
153
 TEMP_CUSTOMISE=/etc/${PROJECT_NAME}/image-customise
153
 if [ -f /usr/local/bin/${PROJECT_NAME}-image-customise ]; then
154
 if [ -f /usr/local/bin/${PROJECT_NAME}-image-customise ]; then
154
-    sudo cp /usr/local/bin/${PROJECT_NAME}-image-customise $TEMP_CUSTOMISE
155
+	sudo cp /usr/local/bin/${PROJECT_NAME}-image-customise $TEMP_CUSTOMISE
155
 else
156
 else
156
-    sudo cp /usr/bin/${PROJECT_NAME}-image-customise $TEMP_CUSTOMISE
157
+	sudo cp /usr/bin/${PROJECT_NAME}-image-customise $TEMP_CUSTOMISE
157
 fi
158
 fi
158
 sudo sed -i "s|MY_USERNAME=.*|MY_USERNAME=${MY_USERNAME}|g" $TEMP_CUSTOMISE
159
 sudo sed -i "s|MY_USERNAME=.*|MY_USERNAME=${MY_USERNAME}|g" $TEMP_CUSTOMISE
159
 sudo sed -i "s|MY_PASSWORD=.*|MY_PASSWORD=${MY_PASSWORD}|g" $TEMP_CUSTOMISE
160
 sudo sed -i "s|MY_PASSWORD=.*|MY_PASSWORD=${MY_PASSWORD}|g" $TEMP_CUSTOMISE
169
 sudo sed -i "s|SSH_PORT=.*|SSH_PORT=\"${SSH_PORT}\"|g" $TEMP_CUSTOMISE
170
 sudo sed -i "s|SSH_PORT=.*|SSH_PORT=\"${SSH_PORT}\"|g" $TEMP_CUSTOMISE
170
 sudo sed -i "s|ONION_ONLY=.*|ONION_ONLY=\"${ONION_ONLY}\"|g" $TEMP_CUSTOMISE
171
 sudo sed -i "s|ONION_ONLY=.*|ONION_ONLY=\"${ONION_ONLY}\"|g" $TEMP_CUSTOMISE
171
 sudo sed -i "s|PROJECT_REPO=.*|PROJECT_REPO=\"${PROJECT_REPO}\"|g" $TEMP_CUSTOMISE
172
 sudo sed -i "s|PROJECT_REPO=.*|PROJECT_REPO=\"${PROJECT_REPO}\"|g" $TEMP_CUSTOMISE
173
+sudo sed -i "s|DEBIAN_INSTALL_ONLY=.*|DEBIAN_INSTALL_ONLY=\"${DEBIAN_INSTALL_ONLY}\"|g" $TEMP_CUSTOMISE
172
 
174
 
173
 echo $"starting $VMDEBOOTSTRAP"
175
 echo $"starting $VMDEBOOTSTRAP"
174
 # Run vmdebootstrap script to create image
176
 # Run vmdebootstrap script to create image
175
 sudo -H \
177
 sudo -H \
176
-    SUITE="$SUITE" \
177
-    MIRROR="$MIRROR" \
178
-    BUILD_MIRROR="$BUILD_MIRROR"\
179
-    MACHINE="$MACHINE" \
180
-    ARCHITECTURE="$ARCHITECTURE" \
181
-    SOURCE="$SOURCE" \
182
-    CUSTOM_SETUP="$CUSTOM_SETUP" \
183
-    $VMDEBOOTSTRAP \
184
-    --log $(dirname $IMAGE)/${PROJECT_NAME}.log \
185
-    --log-level debug \
186
-    --size $IMAGE_SIZE \
187
-    --image $IMAGE.img \
188
-    --hostname ${PROJECT_NAME} \
189
-    --verbose \
190
-    --mirror $BUILD_MIRROR \
191
-    --customize "$TEMP_CUSTOMISE" \
192
-    --lock-root-password \
193
-    --arch $ARCHITECTURE \
194
-    --distribution $SUITE \
195
-    $extra_opts \
196
-    $pkgopts
178
+	 SUITE="$SUITE" \
179
+	 MIRROR="$MIRROR" \
180
+	 BUILD_MIRROR="$BUILD_MIRROR"\
181
+	 MACHINE="$MACHINE" \
182
+	 ARCHITECTURE="$ARCHITECTURE" \
183
+	 SOURCE="$SOURCE" \
184
+	 CUSTOM_SETUP="$CUSTOM_SETUP" \
185
+	 $VMDEBOOTSTRAP \
186
+	 --log $(dirname $IMAGE)/${PROJECT_NAME}.log \
187
+	 --log-level debug \
188
+	 --size $IMAGE_SIZE \
189
+	 --image $IMAGE.img \
190
+	 --hostname ${PROJECT_NAME} \
191
+	 --verbose \
192
+	 --mirror $BUILD_MIRROR \
193
+	 --customize "$TEMP_CUSTOMISE" \
194
+	 --lock-root-password \
195
+	 --arch $ARCHITECTURE \
196
+	 --distribution $SUITE \
197
+	 $extra_opts \
198
+	 $pkgopts
197
 
199
 
198
 echo $'Removing customised customisation script'
200
 echo $'Removing customised customisation script'
199
 sudo shred -zu $TEMP_CUSTOMISE
201
 sudo shred -zu $TEMP_CUSTOMISE