diff --git a/src/freedombone-image b/src/freedombone-image index cb40adf1..7a9364d0 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -94,7 +94,8 @@ SSH_PORT=2222 ONION_ONLY="no" # Where to fetch packages -MIRROR='http://httpredir.debian.org/debian' +#MIRROR='http://httpredir.debian.org/debian' +MIRROR='http://ftp.de.debian.org/debian' mesh_router_setup_script() { # create a setup script for a mesh router @@ -121,164 +122,164 @@ mesh_router_setup_script() { while [[ $# > 1 ]] do -key="$1" + 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=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | 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" - ;; - # 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" - ;; - -i|--interactive) - shift - INTERACTIVE="$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) - shift - ONION_ONLY="$1" - ;; - -r|--repo|--repository) - shift - PROJECT_REPO="$1" - ;; - -m|--mirror) - shift - MIRROR="$1" - ;; - *) - # unknown option - ;; -esac -shift + 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=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | 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" + ;; + # 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" + ;; + -i|--interactive) + shift + INTERACTIVE="$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) + shift + ONION_ONLY="$1" + ;; + -r|--repo|--repository) + shift + PROJECT_REPO="$1" + ;; + -m|--mirror) + shift + MIRROR="$1" + ;; + *) + # unknown option + ;; + esac + shift done if [[ $INTERACTIVE == "yes" || $INTERACTIVE == "y" || $INTERACTIVE == "Yes" ]]; then - ${PROJECT_NAME}-config --minimal "$MINIMAL_INSTALL" - if [ -f freedombone.cfg ]; then - CONFIG_FILENAME=freedombone.cfg - DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}') - fi + ${PROJECT_NAME}-config --minimal "$MINIMAL_INSTALL" + if [ -f freedombone.cfg ]; then + CONFIG_FILENAME=freedombone.cfg + DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}') + fi fi if [[ $GENERIC_IMAGE == "yes" ]]; then - USERNAME=$GENERIC_IMAGE_USERNAME - PASSWORD=$GENERIC_IMAGE_PASSWORD + USERNAME=$GENERIC_IMAGE_USERNAME + PASSWORD=$GENERIC_IMAGE_PASSWORD fi # If this is a mesh variant then create an appropriate script #if [[ $VARIANT == "mesh"* ]]; then - #CONFIG_FILENAME=/tmp/${PROJECT_NAME}_mesh.cfg - #mesh_router_setup_script $CONFIG_FILENAME - #DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}') +#CONFIG_FILENAME=/tmp/${PROJECT_NAME}_mesh.cfg +#mesh_router_setup_script $CONFIG_FILENAME +#DEFAULT_DOMAIN_NAME=$(cat $CONFIG_FILENAME | grep 'DEFAULT_DOMAIN_NAME' | awk -F '=' '{print $2}') #fi if [ ! $PASSWORD ]; then - # generate a random password - PASSWORD="$(openssl rand -base64 10 | cut -c1-8)" + # generate a random password + PASSWORD="$(openssl rand -base64 10 | cut -c1-8)" fi # Move any existing images into a build subdirectory image_types=( xz img sig vdi qcow2 ) for im in "${image_types[@]}" do - 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 - mv -f ${CURR_DIR}/${PROJECT_NAME}*.${im} ${CURR_DIR}/build - fi + 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 + mv -f ${CURR_DIR}/${PROJECT_NAME}*.${im} ${CURR_DIR}/build + fi done # Delete anything which didn't move for im in "${image_types[@]}" do - 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 + 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 + rm ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt fi if [ -d $TEMPBUILD_DIR ]; then - rm -rf $TEMPBUILD_DIR + rm -rf $TEMPBUILD_DIR fi mkdir -p $TEMPBUILD_DIR if [ -f /usr/local/bin/$MAKEFILE ]; then - cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile + cp /usr/local/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile else - cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile + cp /usr/bin/$MAKEFILE $TEMPBUILD_DIR/Makefile fi cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR @@ -287,63 +288,63 @@ chown -R $CURR_USER:$CURR_USER $TEMPBUILD_DIR cd $TEMPBUILD_DIR if [[ $MINIMAL_INSTALL == "yes" ]]; then - IMAGE_NAME='min' + IMAGE_NAME='min' fi if [[ $ONION_ONLY != "no" ]]; then - IMAGE_NAME='onion' + IMAGE_NAME='onion' fi cd $TEMPBUILD_DIR make $IMAGE_TYPE \ - USERNAME="$USERNAME" \ - PASSWORD="$PASSWORD" \ - ROUTER_IP_ADDRESS="$ROUTER_IP_ADDRESS" \ - BOX_IP_ADDRESS="$BOX_IP_ADDRESS" \ - NAMESERVER1="$NAMESERVER1" \ - NAMESERVER2="$NAMESERVER2" \ - 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" + USERNAME="$USERNAME" \ + PASSWORD="$PASSWORD" \ + ROUTER_IP_ADDRESS="$ROUTER_IP_ADDRESS" \ + BOX_IP_ADDRESS="$BOX_IP_ADDRESS" \ + NAMESERVER1="$NAMESERVER1" \ + NAMESERVER2="$NAMESERVER2" \ + 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" if [ ! "$?" = "0" ]; then - echo $'Build failed' - rm -rf $TEMPBUILD_DIR - exit 1 + echo $'Build failed' + rm -rf $TEMPBUILD_DIR + exit 1 fi EXPECTED_EXTENSION='xz' if [[ $IMAGE_TYPE == "qemu"* ]]; then - EXPECTED_EXTENSION='qcow2' + EXPECTED_EXTENSION='qcow2' fi if [[ $IMAGE_TYPE == "virtualbox"* ]]; then - EXPECTED_EXTENSION='vdi' + EXPECTED_EXTENSION='vdi' 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 + echo $'Image was not created' + rm -rf $TEMPBUILD_DIR + exit 2 fi # Move images from temporary directory to the current directory for im in "${image_types[@]}" do - no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l) - if (( no_of_files > 0 )); then - mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/ - fi + no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l) + if (( no_of_files > 0 )); then + mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/ + fi done # Remove the temporary directory @@ -358,32 +359,32 @@ Image was created. You will be able to log into it with: " if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then - echo $" ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT + echo $" ssh $USERNAME@$DEFAULT_DOMAIN_NAME -p $SSH_PORT Password: $PASSWORD " else - if [[ $IMAGE_TYPE != "qemu"* ]]; then - echo $" Username: $USERNAME + 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 $" + 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 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 + rm -f $CONFIG_FILENAME fi # record the default login credentials for later use @@ -392,12 +393,12 @@ Password: $PASSWORD" > ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt chmod 600 ${CURR_DIR}/${PROJECT_NAME}_login_credentials.txt if [[ $IMAGE_TYPE != "virtualbox"* && $IMAGE_TYPE != "qemu"* ]]; then - echo '' - echo $'You can copy the image to a microSD card with:' - echo '' - echo " unxz -k ${PROJECT_NAME}*.img.xz" - echo " sudo dd bs=1M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync" - echo '' + echo '' + echo $'You can copy the image to a microSD card with:' + echo '' + echo " unxz -k ${PROJECT_NAME}*.img.xz" + echo " sudo dd bs=1M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync" + echo '' fi exit 0