123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726 |
- #!/bin/bash
- # _____ _ _
- # | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
- # | __| _| -_| -_| . | . | | . | . | | -_|
- # |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
- #
- # Freedom in the Cloud
- #
- # Creates a debian image using vmdebootstrap
- #
- # To shut down after error: fuser -mvk /tmp/tmpdir/build
- #
- # License
- # =======
- #
- # Copyright (C) 2015-2018 Bob Mottram <bob@freedombone.net>
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU Affero General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU Affero General Public License for more details.
- #
- # You should have received a copy of the GNU Affero General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- PROJECT_NAME='freedombone'
-
- export TEXTDOMAIN=${PROJECT_NAME}-image
- export TEXTDOMAINDIR="/usr/share/locale"
-
- USERHOME=$HOME
-
- PROJECT_INSTALL_DIR=/usr/local/bin
- if [ -f /usr/bin/${PROJECT_NAME} ]; then
- PROJECT_INSTALL_DIR=/usr/bin
- fi
-
- source "$PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars"
-
- #get the project repo
- PROJECT_REPO="https://github.com/bashrc/${PROJECT_NAME}"
- UTILS_FILES="/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*"
- for f in $UTILS_FILES
- do
- source "$f"
- done
- read_config_param PROJECT_REPO
-
- # recommended RAM for virtual machines
- VM_MEMORY='1G'
-
- VARIANT='full'
-
- # fixed username and password when the --generic option is used
- GENERIC_IMAGE_USERNAME='fbone'
- GENERIC_IMAGE_PASSWORD='freedombone'
-
- IMAGE_TYPE='beaglebone'
- CURR_DIR=$(pwd)
- CURR_USER="$USER"
- TEMPBUILD_DIR=~/.tmp_${PROJECT_NAME}_build
- VMDEBOOTSTRAP_REPO=git://git.liw.fi/vmdebootstrap
- VMDEBOOTSTRAP_VERSION=0.8
- MAKEFILE=${PROJECT_NAME}-image-makefile
- IMAGE_SIZE=7.9G
- IMAGE_SIZE_SPECIFIED=
- IMAGE_NAME='full'
-
- USERNAME="$USER"
- PASSWORD=
-
- CONTINUOUS_INTEGRATION=""
-
- # IP address of the router (gateway)
- ROUTER_IP_ADDRESS="192.168.1.254"
-
- # The fixed IP address of the Beaglebone Black (or other SBC) on your local network
- BOX_IP_ADDRESS="192.168.1.55"
-
- # DNS
- NAMESERVER1='91.239.100.100'
- NAMESERVER2='89.233.43.71'
- NAMESERVER3='213.73.91.35'
- NAMESERVER4='85.214.73.63'
- NAMESERVER5='84.200.69.80'
- NAMESERVER6='84.200.70.40'
-
- # An optional freedombone configuration file
- CONFIG_FILENAME=
-
- DEFAULT_DOMAIN_NAME="${LOCAL_NAME}.local"
-
- # Minimum number of characters in a password
- MINIMUM_PASSWORD_LENGTH=$(grep 'MINIMUM_PASSWORD_LENGTH=' "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-passwords" | head -n 1 | awk -F '=' '{print $2}')
-
- # Optional ssh public key to allow
- SSH_PUBKEY="no"
-
- # interactive mode
- INTERACTIVE="no"
-
- # Whether this is a generic image for mass redistribution on the interwebs
- GENERIC_IMAGE="yes"
-
- # Whether to reduce the number of decisions during interactive install
- MINIMAL_INSTALL="yes"
-
- # default SSH port
- SSH_PORT=2222
-
- # Whether sites are accessible only within a Tor browser
- ONION_ONLY="no"
-
- # Where to fetch packages
- #MIRROR='http://httpredir.debian.org/debian'
- MIRROR='http://ftp.de.debian.org/debian'
-
- # Whether to only install debian but nothing else
- DEBIAN_INSTALL_ONLY='no'
-
- # wifi settings
- WIFI_INTERFACE='wlan0'
- WIFI_SSID=
- WIFI_TYPE='wpa2-psk'
- WIFI_PASSPHRASE=
- WIFI_HOTSPOT='no'
- WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
-
- # Whether to install non-free wifi drivers for the mesh client
- INSECURE='no'
-
- # for mesh installs whether to delete all data and generate
- # a new identity at every shutdown/boot
- AMNESIC='no'
-
- # Is this a dedicated gnusocial or postactiv instance?
- SOCIALINSTANCE=
-
- # Versions used for Arch/Parabola setup
- MBR_VERSION='1.1.11'
-
- # version of cliapp to use with parabola
- CLIAPP_COMMIT='cb17626e6441a5bf43a1d3f17a769f8e44ff4977'
-
- # version of mbr to use with parabola
- MBR_COMMIT='fb7ac88f251a1529b8aa759abc49acb2e99094b2'
-
- # defining repo variables here ensures that they will be mirrored
- MULTIPATH_TOOLS_REPO="https://aur.archlinux.org/multipath-tools.git"
- MBR_REPO="https://aur.archlinux.org/mbr.git"
- CLIAPP_REPO="git://git.liw.fi/cliapp"
-
- # Whether to use a SATA drive and if so what its device/partition name is
- # eg. sda2
- EXTERNAL_DRIVE=
-
- function image_setup {
- setup_type=$1
-
- case $setup_type in
- debian|ubuntu|trisquel|mint)
- sudo apt-get -yq remove vmdebootstrap
- sudo apt-get -yq install build-essential gcc-multilib g++-multilib libc6-dev
- sudo apt-get -yq install libc6-dev-i386
- sudo apt-get -yq install git python-docutils mktorrent xz-utils debootstrap
- sudo apt-get -yq install dosfstools btrfs-tools extlinux python-distro-info mbr
- sudo apt-get -yq install qemu-user-static binfmt-support u-boot-tools qemu
- sudo apt-get -yq install python-cliapp kpartx
- sudo cp /sbin/install-mbr /usr/bin/install-mbr
- ;;
- parabola|arch)
- sudo pacman -S --noconfirm libc++ git gcc gcc-libs python-docutils mktorrent patch
- sudo pacman -S --noconfirm debootstrap xz dosfstools btrfs-progs syslinux python-pip
- sudo pacman -S --noconfirm qemu-static binfmt-qemu-static uboot-tools qemu parted
- sudo pacman -S --noconfirm dpkg-devtools bin86 arch-install-scripts qemu-arch-extra
- sudo pacman -S --noconfirm syncthing
- mkdir "$USERHOME/develop"
- if [ -d "$USERHOME/develop/python-cliapp" ]; then
- sudo rm -rf "$USERHOME/develop/python-cliapp"
- fi
- if ! git_clone "$CLIAPP_REPO" "$USERHOME/develop/python-cliapp"; then
- echo $"Failed to clone python-cliapp"
- return
- fi
- if [ ! -d "$USERHOME/develop/python-cliapp" ]; then
- echo $"Couldn't clone python-cliapp"
- return
- fi
- sudo pacman -S --noconfirm python2-coverage python2-pytest-cov python2-sphinx
- sudo pacman -S --noconfirm autopep8 python2-pylint python2-yaml python2-xdg python2-pip
- cd "$USERHOME/develop/python-cliapp" || exit 7824526242
- git checkout $CLIAPP_COMMIT -b $CLIAPP_COMMIT
- sudo python2 setup.py install
- sudo pip2 install distro-info logging
- if [ -d "$USERHOME/develop/mbr" ]; then
- sudo rm -rf "$USERHOME/develop/mbr"
- fi
- if ! git_clone $MBR_REPO "$USERHOME/develop/mbr"; then
- echo $"Failed to clone mbr"
- return
- fi
- if [ ! -d "$USERHOME/develop/mbr" ]; then
- echo $"Couldn't clone mbr"
- return
- fi
- cd "$USERHOME/develop/mbr" || exit 2468724524
- git checkout $MBR_COMMIT -b $MBR_COMMIT
- makepkg --force --noconfirm
- if [ ! -f mbr-${MBR_VERSION}.tar.gz ]; then
- echo $"mbr tarball was not found for version ${MBR_VERSION}"
- return
- fi
- tar -xzvf mbr-${MBR_VERSION}.tar.gz
- if [ ! -d "$USERHOME/develop/mbr/mbr-${MBR_VERSION}" ]; then
- echo $"mbr tarball could not be extracted"
- return
- fi
- cd "$USERHOME/develop/mbr/mbr-${MBR_VERSION}" || exit 13584584
- cp ../*.patch .
- patch -p0 < *.patch
- ./configure
- make
- sudo make install
- if [ ! -f /usr/local/sbin/install-mbr ]; then
- echo $'Failed to install mbr'
- return
- fi
- sudo cp /usr/local/sbin/install-mbr /sbin
- if [ -d "$USERHOME/develop/multipath-tools" ]; then
- sudo rm -rf "$USERHOME/develop/multipath-tools"
- fi
- if ! git_clone "$MULTIPATH_TOOLS_REPO" "$USERHOME/develop/multipath-tools"; then
- echo $"Failed to clone multipath-tools"
- return
- fi
- if [ ! -d "$USERHOME/develop/multipath-tools" ]; then
- echo $"Couldn't clone multipath-tools"
- return
- fi
- sudo pacman -S --noconfirm device-mapper libaio liburcu fakeroot
- cd "$USERHOME/develop/multipath-tools" || exit 27462454
- makepkg --force --noconfirm
- makepkg -i --force --noconfirm
- sudo wget "https://raw.githubusercontent.com/bashrc/${PROJECT_NAME}/master/image_build/debootstrap/scripts/${DEBIAN_VERSION}" -O /usr/share/debootstrap/scripts/debscript
- sudo cp -f "/usr/share/debootstrap/scripts/debscript" "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}"
- if [ ! -f "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}" ]; then
- echo $"No debian debootstrap script was found for $DEBIAN_VERSION"
- return
- fi
- debian_script_hash=$(sha256sum "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}" | awk -F ' ' '{print $1}')
- expected_debian_script_hash='620fa84c7ef64d10349aed38fa9cc2e7f00a6fcd1bc425f33ca2b57cc946fd0c'
- if [[ "$debian_script_hash" != "$expected_debian_script_hash" ]]; then
- echo $"Invalid hash for debootstrap ${DEBIAN_VERSION} script"
- return
- fi
- sudo chmod +x "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}"
- ;;
- *)
- echo $'Unkown operating system'
- return
- ;;
- esac
-
- echo $'Setup complete'
- }
-
- function mesh_router_setup_script {
- # create a setup script for a mesh router
- mesh_script_filename=$1
- { echo "MY_USERNAME=${USERNAME}";
- echo "DEFAULT_DOMAIN_NAME=${USERNAME}";
- echo 'SYSTEM_TYPE=mesh';
- echo 'INSTALLING_ON_BBB=no';
- echo 'USB_DRIVE=/dev/sda1';
- echo 'DDNS_PROVIDER=';
- echo 'DDNS_USERNAME=';
- echo 'DDNS_PASSWORD=';
- echo 'DEFAULT_LANGUAGE=en_GB.UTF-8';
- echo 'MY_EMAIL_ADDRESS=';
- echo 'ENABLE_BATMAN=yes';
- echo 'DEBIAN_REPO=';
- echo 'NAMESERVER1=';
- echo 'NAMESERVER2=';
- echo 'NAMESERVER3=';
- echo 'NAMESERVER4=';
- echo 'NAMESERVER5=';
- echo 'NAMESERVER6=';
- echo 'BATMAN_CELLID=any';
- echo 'WIFI_CHANNEL=9'; } > "$mesh_script_filename"
- }
-
- while [ $# -gt 1 ]
- do
- key="$1"
-
- case $key in
- -h|--help)
- show_help
- ;;
- -c|--config)
- shift
- CONFIG_FILENAME="$1"
- if [ ! -f "$CONFIG_FILENAME" ]; then
- echo $"Config file $CONFIG_FILENAME not found"
- exit 3
- fi
- DEFAULT_DOMAIN_NAME=$(grep 'DEFAULT_DOMAIN_NAME' "$CONFIG_FILENAME" | awk -F '=' '{print $2}')
- ;;
- -t|--target|--board)
- shift
- IMAGE_TYPE="$1"
- ;;
- -u|--user|--username)
- shift
- USERNAME="$1"
- ;;
- -p|--password)
- shift
- PASSWORD="$1"
- if [ ${#PASSWORD} -lt "$MINIMUM_PASSWORD_LENGTH" ]; then
- echo $"Your password chould contain at least ${MINIMUM_PASSWORD_LENGTH} characters"
- exit 3628
- fi
- ;;
- --sshkey|--sshpubkey|--pubkey)
- shift
- SSH_PUBKEY="$1"
- ;;
- -s|--size)
- shift
- IMAGE_SIZE="$1"
- IMAGE_SIZE_SPECIFIED=1
- ;;
- # Box static IP address on the LAN
- --ip)
- shift
- BOX_IP_ADDRESS="$1"
- ;;
- # Router IP address on the LAN
- --iprouter)
- shift
- ROUTER_IP_ADDRESS="$1"
- ;;
- # nameserver 1
- --ns1|--nameserver1)
- shift
- NAMESERVER1="$1"
- ;;
- # nameserver 2
- --ns2|--nameserver2)
- shift
- NAMESERVER2="$1"
- ;;
- # nameserver 3
- --ns3|--nameserver3)
- shift
- NAMESERVER2="$1"
- ;;
- # nameserver 4
- --ns4|--nameserver4)
- shift
- NAMESERVER4="$1"
- ;;
- # nameserver 5
- --ns5|--nameserver5)
- shift
- NAMESERVER5="$1"
- ;;
- # nameserver 6
- --ns6|--nameserver6)
- shift
- NAMESERVER6="$1"
- ;;
- -i|--interactive)
- shift
- INTERACTIVE="$1"
- ;;
- --ci)
- shift
- CONTINUOUS_INTEGRATION="$1"
- ;;
- -g|--generic)
- shift
- GENERIC_IMAGE="$1"
- ;;
- --minimal)
- shift
- MINIMAL_INSTALL="$1"
- ;;
- --ssh|--sshport)
- shift
- SSH_PORT="$1"
- ;;
- -v|--variant)
- shift
- VARIANT="$1"
- ;;
- -o|--onion|--onion-addresses|--onion-addresses-only)
- shift
- ONION_ONLY="$1"
- ;;
- -a|--amnesic)
- shift
- AMNESIC="$1"
- ;;
- -r|--repo|--repository)
- shift
- PROJECT_REPO="$1"
- ;;
- --social|--instance)
- shift
- SOCIALINSTANCE="$1"
- ;;
- -m|--mirror)
- shift
- MIRROR="$1"
- ;;
- --debianonly|--basic)
- shift
- DEBIAN_INSTALL_ONLY="$1"
- ;;
- --interface|--if)
- shift
- WIFI_INTERFACE="$1"
- ;;
- --ssid|--essid)
- shift
- WIFI_SSID="$1"
- ;;
- --wifitype)
- shift
- WIFI_TYPE="$1"
- ;;
- --wifipass|--passphrase)
- shift
- WIFI_PASSPHRASE="$1"
- ;;
- --hotspot)
- shift
- if [[ $"$1" == $'yes' || $"$1" == $'y' ]]; then
- WIFI_HOTSPOT='yes'
- fi
- ;;
- --networks)
- shift
- WIFI_NETWORKS_FILE="$1"
- ;;
- --insecure)
- shift
- INSECURE="$1"
- ;;
- --setup)
- shift
- image_setup "$1"
- exit 0
- ;;
- --local|--localname)
- shift
- LOCAL_NAME="$1"
- ;;
- --sata|--hdd)
- shift
- EXTERNAL_DRIVE="$1"
- ;;
- *)
- # unknown option
- ;;
- esac
- shift
- done
-
- if [[ $INTERACTIVE == "yes" || $INTERACTIVE == "y" || $INTERACTIVE == "Yes" ]]; then
- ${PROJECT_NAME}-config --minimal "$MINIMAL_INSTALL"
- if [ -f "$HOME/${PROJECT_NAME}.cfg" ]; then
- CONFIG_FILENAME=$HOME/${PROJECT_NAME}.cfg
- DEFAULT_DOMAIN_NAME=$(grep 'DEFAULT_DOMAIN_NAME' "$CONFIG_FILENAME" | awk -F '=' '{print $2}')
- fi
- fi
-
- if [[ $GENERIC_IMAGE == "yes" ]]; then
- USERNAME=$GENERIC_IMAGE_USERNAME
- PASSWORD=$GENERIC_IMAGE_PASSWORD
- fi
-
- if [ ! $PASSWORD ]; then
- # generate a random password
- PASSWORD=$(openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c "${MINIMUM_PASSWORD_LENGTH}")
- fi
-
- # Move any existing images into a build subdirectory
- image_types=( xz img sig vdi qcow2 )
- # shellcheck disable=SC2068
- for im in ${image_types[@]}
- do
- # shellcheck disable=SC2012,SC2086
- no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
- if (( no_of_files > 0 )); then
- if [ ! -d "${CURR_DIR}/build" ]; then
- mkdir "${CURR_DIR}/build"
- fi
- # shellcheck disable=SC2086
- mv -f ${CURR_DIR}/${PROJECT_NAME}*.${im} ${CURR_DIR}/build
- fi
- done
-
- # Delete anything which didn't move
- # shellcheck disable=SC2068
- for im in ${image_types[@]}
- do
- # shellcheck disable=SC2012,SC2086
- no_of_files=$(ls -afq ${CURR_DIR}/${PROJECT_NAME}*.${im} | wc -l)
- if (( no_of_files > 0 )); then
- rm -f "${CURR_DIR}/${PROJECT_NAME}*.${im}"
- fi
- done
-
- # Remove any existing login credentials file
- if [ -f "${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt" ]; then
- rm "${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt"
- fi
-
- if [ -d $TEMPBUILD_DIR ]; then
- rm -rf $TEMPBUILD_DIR
- fi
- mkdir -p $TEMPBUILD_DIR
- if [ -f /usr/local/bin/$MAKEFILE ]; then
- cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
- else
- cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile
- fi
-
- cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR
- rm -rf $TEMPBUILD_DIR/vendor
- chown -R "$CURR_USER":"$CURR_USER" $TEMPBUILD_DIR
- cd $TEMPBUILD_DIR || exit 24729847
-
- if [[ $MINIMAL_INSTALL == "yes" ]]; then
- IMAGE_NAME=$'min'
- fi
-
- if [[ $ONION_ONLY != "no" ]]; then
- IMAGE_NAME=$'onion'
- fi
-
- if [ "$EXTERNAL_DRIVE" ]; then
- IMAGE_NAME=$'sata'
- fi
-
- if [[ $VARIANT == 'mesh' ]]; then
- IMAGE_NAME=$'mesh'
- # typically not much disk space is needed for a mesh node
- if [ ! $IMAGE_SIZE_SPECIFIED ]; then
- IMAGE_SIZE=5G
- fi
- fi
-
- if [[ $VARIANT == 'meshclient' || $VARIANT == 'meshusb' ]]; then
- IMAGE_NAME=$'meshclient'
- if [[ $INSECURE != 'no' ]]; then
- IMAGE_NAME=$'meshclient-insecure'
- fi
-
- if [ ! $IMAGE_SIZE_SPECIFIED ]; then
- IMAGE_SIZE=15.0G
- fi
- fi
-
- if [[ $VARIANT == 'usb' ]]; then
- IMAGE_NAME=$'usb'
- fi
-
- # append amnesic to the image name if needed
- if [[ $AMNESIC != 'no' ]]; then
- IMAGE_NAME="${IMAGE_NAME}-amnesic"
- fi
-
- if [[ "$SOCIALINSTANCE" == "gnusocial" || "$SOCIALINSTANCE" == "postactiv" || "$SOCIALINSTANCE" == "pleroma" ]]; then
- IMAGE_NAME="${IMAGE_NAME}-${SOCIALINSTANCE}"
- fi
-
- cd $TEMPBUILD_DIR || exit 724245267
- make "$IMAGE_TYPE" \
- MYUSERNAME="$USERNAME" \
- MYPASSWORD="$PASSWORD" \
- ROUTER_IP_ADDRESS="$ROUTER_IP_ADDRESS" \
- BOX_IP_ADDRESS="$BOX_IP_ADDRESS" \
- NAMESERVER1="$NAMESERVER1" \
- NAMESERVER2="$NAMESERVER2" \
- NAMESERVER3="$NAMESERVER3" \
- NAMESERVER4="$NAMESERVER4" \
- NAMESERVER5="$NAMESERVER5" \
- NAMESERVER6="$NAMESERVER6" \
- PROJECT_NAME="$PROJECT_NAME" \
- CONFIG_FILENAME="$CONFIG_FILENAME" \
- IMAGE_SIZE="$IMAGE_SIZE" \
- SSH_PUBKEY="$SSH_PUBKEY" \
- GENERIC_IMAGE="$GENERIC_IMAGE" \
- MINIMAL_INSTALL="$MINIMAL_INSTALL" \
- SSH_PORT="$SSH_PORT" \
- ONION_ONLY="$ONION_ONLY" \
- IMAGE_NAME="$IMAGE_NAME" \
- PROJECT_REPO="$PROJECT_REPO" \
- MIRROR="$MIRROR" \
- BUILD_MIRROR="$MIRROR" \
- DEBIAN_INSTALL_ONLY="$DEBIAN_INSTALL_ONLY" \
- WIFI_INTERFACE="$WIFI_INTERFACE" \
- WIFI_SSID="$WIFI_SSID" \
- WIFI_TYPE="$WIFI_TYPE" \
- WIFI_PASSPHRASE="$WIFI_PASSPHRASE" \
- WIFI_HOTSPOT="$WIFI_HOTSPOT" \
- WIFI_NETWORKS_FILE="$WIFI_NETWORKS_FILE" \
- VARIANT="$VARIANT" \
- MINIMUM_PASSWORD_LENGTH="$MINIMUM_PASSWORD_LENGTH" \
- INSECURE="$INSECURE" \
- AMNESIC="$AMNESIC" \
- SOCIALINSTANCE="$SOCIALINSTANCE" \
- EXTERNAL_DRIVE="$EXTERNAL_DRIVE" \
- CONTINUOUS_INTEGRATION="$CONTINUOUS_INTEGRATION" \
- LOCAL_NAME="$LOCAL_NAME"
-
- # shellcheck disable=SC2181
- if [ ! "$?" = "0" ]; then
- echo $'Build failed'
- rm -rf $TEMPBUILD_DIR
- exit 1
- fi
-
- EXPECTED_EXTENSION='xz'
- if [[ $IMAGE_TYPE == "qemu"* ]]; then
- EXPECTED_EXTENSION='qcow2'
- fi
-
- shopt -s nullglob
- imgfiles=("build/${PROJECT_NAME}*.${EXPECTED_EXTENSION}")
- if [ ${#imgfiles[@]} -eq 0 ]; then
- echo $'Image was not created'
- rm -rf $TEMPBUILD_DIR
- exit 2
- fi
-
- # Move images from temporary directory to the current directory
- # shellcheck disable=SC2068
- for im in ${image_types[@]}
- do
- # shellcheck disable=SC2012,SC2086
- no_of_files=$(ls -l build/${PROJECT_NAME}*.${im} | wc -l)
- if [ "$no_of_files" -gt 0 ]; then
- # shellcheck disable=SC2086
- mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
- # shellcheck disable=SC2086
- sudo chown "${CURR_USER}":"${CURR_USER}" ${CURR_DIR}/*.${im}
- fi
- done
-
- # Remove the temporary directory
- rm -rf ${TEMPBUILD_DIR}
-
- cd "${CURR_DIR}" || exit 2842845284
-
- clear
- if [[ $VARIANT != 'meshclient' && $VARIANT != 'meshusb' && $VARIANT != 'mesh' ]]; then
- echo $"
- Image was created.
-
- You will be able to log into it with:
- "
- if [[ $IMAGE_TYPE != "qemu"* ]]; then
- echo $" ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT
-
- Password: $PASSWORD
- "
- else
- if [[ $IMAGE_TYPE != "qemu"* ]]; then
- echo $" Username: $USERNAME
- Password: $PASSWORD
- "
- else
- if [[ $IMAGE_TYPE != "qemu-x86_64"* && $IMAGE_TYPE != "qemu-amd64"* ]]; then
- echo "qemu-system-i386 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
- else
- echo "qemu-system-x86_64 -m ${VM_MEMORY} $(ls ${PROJECT_NAME}*.qcow2)"
- fi
- echo $"
- Username: $USERNAME
- Password: $PASSWORD
- "
- fi
- fi
- else
- echo $"
- Image was created.
- "
- fi
-
- ls -lh ${PROJECT_NAME}*.img ${PROJECT_NAME}*.sig ${PROJECT_NAME}*.xz ${PROJECT_NAME}*.vdi ${PROJECT_NAME}*.qcow2
-
- # Remove the mesh script after use
- if [[ $VARIANT == "mesh"* ]]; then
- rm -f "$CONFIG_FILENAME"
- fi
-
- # record the default login credentials for later use
- echo $"Username: $USERNAME
- Password: $PASSWORD" > "${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt"
- chmod 600 "${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt"
-
- if [[ $IMAGE_TYPE != "qemu"* ]]; then
- echo ''
- if [[ $VARIANT != 'meshclient' && $VARIANT != 'meshusb' ]]; then
- echo $'You can copy the image to a microSD card with:'
- else
- echo $'You can copy the image to a USB drive with:'
- fi
- echo ''
- echo " unxz -k ${PROJECT_NAME}*.img.xz"
- echo ' sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8'
- echo " sudo dd bs=32M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync,sync,noerror"
- echo ''
- fi
-
- exit 0
|