From 2b14e187483bf4c84e2fb5504918457ca4b205da Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 26 Apr 2016 20:00:30 +0100 Subject: [PATCH] Can use wifi networks config file from the image builder --- src/freedombone-image | 8 +- src/freedombone-image-customise | 617 ++++++++++++++++---------------- src/freedombone-image-make | 2 + src/freedombone-wifi | 484 ++++++++++++------------- 4 files changed, 563 insertions(+), 548 deletions(-) diff --git a/src/freedombone-image b/src/freedombone-image index 1781deb6..1e6b5dc2 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -106,6 +106,7 @@ WIFI_SSID= WIFI_TYPE='wpa-psk' WIFI_PASSPHRASE= WIFI_HOTSPOT='no' +WIFI_NETWORKS_FILE=${PROJECT_NAME}-wifi.cfg mesh_router_setup_script() { # create a setup script for a mesh router @@ -249,6 +250,10 @@ do WIFI_HOTSPOT='yes' fi ;; + --wifinetworks) + shift + WIFI_NETWORKS_FILE="$1" + ;; *) # unknown option ;; @@ -356,7 +361,8 @@ make $IMAGE_TYPE \ WIFI_SSID="$WIFI_SSID" \ WIFI_TYPE="$WIFI_TYPE" \ WIFI_PASSPHRASE="$WIFI_PASSPHRASE" \ - WIFI_HOTSPOT="$WIFI_HOTSPOT" + WIFI_HOTSPOT="$WIFI_HOTSPOT" \ + WIFI_NETWORKS_FILE="$WIFI_NETWORKS_FILE" if [ ! "$?" = "0" ]; then echo $'Build failed' diff --git a/src/freedombone-image-customise b/src/freedombone-image-customise index 62aa6a75..3fec5e87 100755 --- a/src/freedombone-image-customise +++ b/src/freedombone-image-customise @@ -84,57 +84,58 @@ WIFI_SSID= WIFI_TYPE='wpa-psk' WIFI_PASSPHRASE= WIFI_HOTSPOT='no' +WIFI_NETWORKS_FILE=${PROJECT_NAME}-wifi.cfg enable_eatmydata_override() { - chroot $rootdir apt-get install --no-install-recommends -y eatmydata - if [ -x $rootdir/usr/bin/eatmydata ] && \ - [ ! -f $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata ]; then - echo $"info: Adding apt config to call dpkg via eatmydata" - printf "#!/bin/sh\nexec eatmydata dpkg \"\$@\"\n" \ - > $rootdir/var/tmp/dpkg-eatmydata - chmod 755 $rootdir/var/tmp/dpkg-eatmydata - cat > $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata < $rootdir/var/tmp/dpkg-eatmydata + chmod 755 $rootdir/var/tmp/dpkg-eatmydata + cat > $rootdir/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata < etc/apt/sources.list -deb $NEW_MIRROR $SUITE $COMPONENTS -deb-src $NEW_MIRROR $SUITE $COMPONENTS + cat < etc/apt/sources.list + deb $NEW_MIRROR $SUITE $COMPONENTS + deb-src $NEW_MIRROR $SUITE $COMPONENTS -#deb http://security.debian.org/ $SUITE/updates main -#deb-src http://security.debian.org/ $SUITE/updates main -EOF + #deb http://security.debian.org/ $SUITE/updates main + #deb-src http://security.debian.org/ $SUITE/updates main + EOF } configure_networking() { - if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then - return - fi + if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then + return + fi - if [[ $GENERIC_IMAGE == "no" ]]; then - echo "# This file describes the network interfaces available on your system + if [[ $GENERIC_IMAGE == "no" ]]; then + echo "# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface @@ -148,43 +149,43 @@ iface eth0 inet static netmask 255.255.255.0 gateway $ROUTER_IP_ADDRESS dns-nameservers $NAMESERVER1 $NAMESERVER2 - # Example to keep MAC address between reboots - #hwaddress ether B5:A2:BE:3F:1A:FE + # Example to keep MAC address between reboots + #hwaddress ether B5:A2:BE:3F:1A:FE - # The secondary network interface - #auto eth1 - #iface eth1 inet dhcp + # The secondary network interface + #auto eth1 + #iface eth1 inet dhcp - # WiFi Example - #auto wlan0 - #iface wlan0 inet dhcp - # wpa-ssid \"essid\" - # wpa-psk \"password\" + # WiFi Example + #auto wlan0 + #iface wlan0 inet dhcp + # wpa-ssid \"essid\" + # wpa-psk \"password\" - # Ethernet/RNDIS gadget (g_ether) - # ... or on host side, usbnet and random hwaddr - # Note on some boards, usb0 is automaticly setup with an init script - #iface usb0 inet static - # address 192.168.7.2 - # netmask 255.255.255.0 - # network 192.168.7.0 - # gateway 192.168.7.1" > $rootdir/etc/network/interfaces + # Ethernet/RNDIS gadget (g_ether) + # ... or on host side, usbnet and random hwaddr + # Note on some boards, usb0 is automaticly setup with an init script + #iface usb0 inet static + # address 192.168.7.2 + # netmask 255.255.255.0 + # network 192.168.7.0 + # gateway 192.168.7.1" > $rootdir/etc/network/interfaces - hexarray=( 1 2 3 4 5 6 7 8 9 0 a b c d e f ) - a=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} - b=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} - c=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} - d=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} - e=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} - sed -i "s|#hwaddress ether.*|hwaddress ether de:$a:$b:$c:$d:$e|g" \ - $rootdir/etc/network/interfaces - fi + hexarray=( 1 2 3 4 5 6 7 8 9 0 a b c d e f ) + a=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} + b=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} + c=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} + d=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} + e=${hexarray[$RANDOM%16]}${hexarray[$RANDOM%16]} + sed -i "s|#hwaddress ether.*|hwaddress ether de:$a:$b:$c:$d:$e|g" \ + $rootdir/etc/network/interfaces + fi - sed -i "s/nameserver.*/nameserver $NAMESERVER1/g" $rootdir/etc/resolv.conf - sed -i "/nameserver $NAMESERVER1/a\nameserver $NAMESERVER2" $rootdir/etc/resolv.conf + sed -i "s/nameserver.*/nameserver $NAMESERVER1/g" $rootdir/etc/resolv.conf + sed -i "/nameserver $NAMESERVER1/a\nameserver $NAMESERVER2" $rootdir/etc/resolv.conf - # change the motd to show further install instructions - echo $" + # change the motd to show further install instructions + echo $" .---. . . | | | |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. @@ -203,57 +204,57 @@ following commands, then enter your details. } configure_ssh() { - sed -i "s/Port .*/Port ${SSH_PORT}/g" $rootdir/etc/ssh/sshd_config + sed -i "s/Port .*/Port ${SSH_PORT}/g" $rootdir/etc/ssh/sshd_config - if [[ "$SSH_PUBKEY" != "no" ]]; then - if [ ! -d $rootdir/home/$MY_USERNAME/.ssh ]; then - mkdir $rootdir/home/$MY_USERNAME/.ssh - fi - echo "$SSH_PUBKEY" > $rootdir/home/$MY_USERNAME/.ssh/authorized_keys - chroot $rootdir chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh - sed -i 's|PasswordAuthentication.*|PasswordAuthentication no|g' $rootdir/etc/ssh/sshd_config - echo $"Using ssh public key:" - echo $SSH_PUBKEY - echo $'Password ssh authentication turned off' - fi + if [[ "$SSH_PUBKEY" != "no" ]]; then + if [ ! -d $rootdir/home/$MY_USERNAME/.ssh ]; then + mkdir $rootdir/home/$MY_USERNAME/.ssh + fi + echo "$SSH_PUBKEY" > $rootdir/home/$MY_USERNAME/.ssh/authorized_keys + chroot $rootdir chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh + sed -i 's|PasswordAuthentication.*|PasswordAuthentication no|g' $rootdir/etc/ssh/sshd_config + echo $"Using ssh public key:" + echo $SSH_PUBKEY + echo $'Password ssh authentication turned off' + fi } admin_user_sudo() { - echo "$MY_USERNAME ALL=(ALL) ALL" >> $rootdir/etc/sudoers + echo "$MY_USERNAME ALL=(ALL) ALL" >> $rootdir/etc/sudoers } create_generic_image() { - if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then - return - fi - if [[ $GENERIC_IMAGE == "no" ]]; then - return - fi - VARIANT="full" - if [ $CONFIG_FILENAME ]; then - if [[ "$CONFIG_FILENAME" == *"mesh.cfg"* ]]; then - VARIANT="mesh" - fi - fi + if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then + return + fi + if [[ $GENERIC_IMAGE == "no" ]]; then + return + fi + VARIANT="full" + if [ $CONFIG_FILENAME ]; then + if [[ "$CONFIG_FILENAME" == *"mesh.cfg"* ]]; then + VARIANT="mesh" + fi + fi - # Don't install any configuration. This will be a base system - if [[ $VARIANT != "mesh" ]]; then - CONFIG_FILENAME= - else - touch $rootdir/root/.initial_mesh_setup - fi + # Don't install any configuration. This will be a base system + if [[ $VARIANT != "mesh" ]]; then + CONFIG_FILENAME= + else + touch $rootdir/root/.initial_mesh_setup + fi - # The presence of this file indicates that the initial - # setup has not yet been completed - touch $rootdir/home/$MY_USERNAME/.initial_setup - chroot $rootdir chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.initial_setup - touch $rootdir/root/.initial_setup + # The presence of this file indicates that the initial + # setup has not yet been completed + touch $rootdir/home/$MY_USERNAME/.initial_setup + chroot $rootdir chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.initial_setup + touch $rootdir/root/.initial_setup - cat >> $rootdir/home/$MY_USERNAME/.bashrc <> $rootdir/home/$MY_USERNAME/.bashrc <> $rootdir/root/.bashrc - echo 'if [ -f ~/.initial_setup ]; then' >> $rootdir/root/.bashrc - echo ' if [ -f ~/login.txt ]; then' >> $rootdir/root/.bashrc - echo ' NEW_USER_PASSWORD=$(printf `cat ~/login.txt`)' >> $rootdir/root/.bashrc - echo ' else' >> $rootdir/root/.bashrc - echo ' ENTROPY=$(cat /proc/sys/kernel/random/entropy_avail)' >> $rootdir/root/.bashrc - echo ' if [ $ENTROPY -lt 500 ]; then' >> $rootdir/root/.bashrc - ENTROPY_MESSAGE1=$'Initial setup process' - ENTROPY_MESSAGE2=$'Password Generation' - ENTROPY_MESSAGE3=$'WARNING: The entropy available on this system is too low to generate a password.\n\nThe installation process cannot continue.' - echo " dialog --backtitle \"${ENTROPY_MESSAGE1}\" --title \"${ENTROPY_MESSAGE2}\" --msgbox \"${ENTROPY_MESSAGE3}\" 8 50" >> $rootdir/root/.bashrc - echo ' exit' >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo ' NEW_USER_PASSWORD="$(openssl rand -base64 12 | cut -c1-10)"' >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo ' echo "${NEW_USER_PASSWORD}" > ~/login.txt' >> $rootdir/root/.bashrc + echo '# initial setup of the system' >> $rootdir/root/.bashrc + echo 'if [ -f ~/.initial_setup ]; then' >> $rootdir/root/.bashrc + echo ' if [ -f ~/login.txt ]; then' >> $rootdir/root/.bashrc + echo ' NEW_USER_PASSWORD=$(printf `cat ~/login.txt`)' >> $rootdir/root/.bashrc + echo ' else' >> $rootdir/root/.bashrc + echo ' ENTROPY=$(cat /proc/sys/kernel/random/entropy_avail)' >> $rootdir/root/.bashrc + echo ' if [ $ENTROPY -lt 500 ]; then' >> $rootdir/root/.bashrc + ENTROPY_MESSAGE1=$'Initial setup process' + ENTROPY_MESSAGE2=$'Password Generation' + ENTROPY_MESSAGE3=$'WARNING: The entropy available on this system is too low to generate a password.\n\nThe installation process cannot continue.' + echo " dialog --backtitle \"${ENTROPY_MESSAGE1}\" --title \"${ENTROPY_MESSAGE2}\" --msgbox \"${ENTROPY_MESSAGE3}\" 8 50" >> $rootdir/root/.bashrc + echo ' exit' >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo ' NEW_USER_PASSWORD="$(openssl rand -base64 12 | cut -c1-10)"' >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo ' echo "${NEW_USER_PASSWORD}" > ~/login.txt' >> $rootdir/root/.bashrc - echo ' clear' >> $rootdir/root/.bashrc - echo ' echo ""' >> $rootdir/root/.bashrc - NEW_LOGIN_PASSWORD_MESSAGE1=$'Your new login password is:' - NEW_LOGIN_PASSWORD_MESSAGE2=$'Use it whenever you wish to ssh into this system.' - NEW_LOGIN_PASSWORD_MESSAGE3=$'IMPORTANT: Please take a moment to enter the above password into a\npassword manager or write it down somewhere.' - PRESS_KEY_MESSAGE=$'Press any key to continue...' - echo " echo \"${NEW_LOGIN_PASSWORD_MESSAGE1}\"" >> $rootdir/root/.bashrc - echo ' echo ""' >> $rootdir/root/.bashrc - echo ' toilet "${NEW_USER_PASSWORD}"' >> $rootdir/root/.bashrc - echo ' echo ""' >> $rootdir/root/.bashrc - echo ' echo " ${NEW_USER_PASSWORD}"' >> $rootdir/root/.bashrc - echo ' echo ""' >> $rootdir/root/.bashrc - echo " echo \"${NEW_LOGIN_PASSWORD_MESSAGE2}\"" >> $rootdir/root/.bashrc - echo ' echo ""' >> $rootdir/root/.bashrc - echo " echo \"${NEW_LOGIN_PASSWORD_MESSAGE3}\"" >> $rootdir/root/.bashrc - echo ' echo ""' >> $rootdir/root/.bashrc - echo " read -n1 -r -p \"${PRESS_KEY_MESSAGE}\" key" >> $rootdir/root/.bashrc + echo ' clear' >> $rootdir/root/.bashrc + echo ' echo ""' >> $rootdir/root/.bashrc + NEW_LOGIN_PASSWORD_MESSAGE1=$'Your new login password is:' + NEW_LOGIN_PASSWORD_MESSAGE2=$'Use it whenever you wish to ssh into this system.' + NEW_LOGIN_PASSWORD_MESSAGE3=$'IMPORTANT: Please take a moment to enter the above password into a\npassword manager or write it down somewhere.' + PRESS_KEY_MESSAGE=$'Press any key to continue...' + echo " echo \"${NEW_LOGIN_PASSWORD_MESSAGE1}\"" >> $rootdir/root/.bashrc + echo ' echo ""' >> $rootdir/root/.bashrc + echo ' toilet "${NEW_USER_PASSWORD}"' >> $rootdir/root/.bashrc + echo ' echo ""' >> $rootdir/root/.bashrc + echo ' echo " ${NEW_USER_PASSWORD}"' >> $rootdir/root/.bashrc + echo ' echo ""' >> $rootdir/root/.bashrc + echo " echo \"${NEW_LOGIN_PASSWORD_MESSAGE2}\"" >> $rootdir/root/.bashrc + echo ' echo ""' >> $rootdir/root/.bashrc + echo " echo \"${NEW_LOGIN_PASSWORD_MESSAGE3}\"" >> $rootdir/root/.bashrc + echo ' echo ""' >> $rootdir/root/.bashrc + echo " read -n1 -r -p \"${PRESS_KEY_MESSAGE}\" key" >> $rootdir/root/.bashrc - # change the password for the admin user - echo -n " echo \"${MY_USERNAME}:" >> $rootdir/root/.bashrc - echo '$(printf `cat ~/login.txt`)"|chpasswd' >> $rootdir/root/.bashrc + # change the password for the admin user + echo -n " echo \"${MY_USERNAME}:" >> $rootdir/root/.bashrc + echo '$(printf `cat ~/login.txt`)"|chpasswd' >> $rootdir/root/.bashrc - # update before continuing - echo " cd /root/${PROJECT_NAME}" >> $rootdir/root/.bashrc - echo " git stash" >> $rootdir/root/.bashrc - echo " git pull" >> $rootdir/root/.bashrc - echo " make install" >> $rootdir/root/.bashrc + # update before continuing + echo " cd /root/${PROJECT_NAME}" >> $rootdir/root/.bashrc + echo " git stash" >> $rootdir/root/.bashrc + echo " git pull" >> $rootdir/root/.bashrc + echo " make install" >> $rootdir/root/.bashrc - if [[ $VARIANT != "mesh" ]]; then - if [[ $ONION_ONLY == "no" ]]; then - if [[ $MINIMAL_INSTALL == "no" ]]; then - echo " ${PROJECT_NAME} menuconfig-full" >> $rootdir/root/.bashrc - else - echo " ${PROJECT_NAME} menuconfig" >> $rootdir/root/.bashrc - fi - else - echo " ${PROJECT_NAME} menuconfig-onion" >> $rootdir/root/.bashrc - fi - else - echo " echo ''" >> $rootdir/root/.bashrc - fi - echo ' if [ "$?" = "0" ]; then' >> $rootdir/root/.bashrc - echo " if [ -f ~/${PROJECT_NAME}-completed.txt ]; then" >> $rootdir/root/.bashrc - # Remove the initial setup files - echo ' rm /root/.initial_setup' >> $rootdir/root/.bashrc - echo " rm /home/${MY_USERNAME}/.initial_setup" >> $rootdir/root/.bashrc - echo " touch /root/.remove_${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc - echo ' shred -zu ~/login.txt' >> $rootdir/root/.bashrc - END_MESSAGE1=$'Congratulations!' - if [[ $VARIANT != "mesh" ]]; then - END_MESSAGE2=$'\nYour system has now installed\n\nThe onion ssh service is at $SSH_ONION_HOSTNAME\n\nPress any key to reboot and begin using it' - echo ' SSH_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_ssh/hostname)' >> $rootdir/root/.bashrc - else - END_MESSAGE2=$'\nYour system has now installed\n\nPress any key to reboot and begin using it' - fi - echo " dialog --title '$END_MESSAGE1' --msgbox \"$END_MESSAGE2\" 9 50" >> $rootdir/root/.bashrc - echo ' reboot' >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo ' else' >> $rootdir/root/.bashrc - echo ' key=' >> $rootdir/root/.bashrc - echo ' while [[ $key != "x" ]]; do' >> $rootdir/root/.bashrc - INSTALL_FAIL_MESSAGE=$"Install failed. Press x to continue..." - echo " read -n1 -r -p \"${INSTALL_FAIL_MESSAGE}\" key" >> $rootdir/root/.bashrc - echo ' done' >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo ' exit' >> $rootdir/root/.bashrc - echo 'else' >> $rootdir/root/.bashrc - echo ' # Remove default account after install' >> $rootdir/root/.bashrc - echo " if [ -f /root/.remove_${GENERIC_IMAGE_USERNAME} ]; then" >> $rootdir/root/.bashrc - echo " if [ -d /home/${GENERIC_IMAGE_USERNAME} ]; then" >> $rootdir/root/.bashrc - echo " userdel -r ${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc - echo " if [ -d /home/${GENERIC_IMAGE_USERNAME} ]; then" >> $rootdir/root/.bashrc - echo " rm -rf /home/${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc - echo " rm /root/.remove_${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo ' fi' >> $rootdir/root/.bashrc - echo 'fi' >> $rootdir/root/.bashrc + if [[ $VARIANT != "mesh" ]]; then + if [[ $ONION_ONLY == "no" ]]; then + if [[ $MINIMAL_INSTALL == "no" ]]; then + echo " ${PROJECT_NAME} menuconfig-full" >> $rootdir/root/.bashrc + else + echo " ${PROJECT_NAME} menuconfig" >> $rootdir/root/.bashrc + fi + else + echo " ${PROJECT_NAME} menuconfig-onion" >> $rootdir/root/.bashrc + fi + else + echo " echo ''" >> $rootdir/root/.bashrc + fi + echo ' if [ "$?" = "0" ]; then' >> $rootdir/root/.bashrc + echo " if [ -f ~/${PROJECT_NAME}-completed.txt ]; then" >> $rootdir/root/.bashrc + # Remove the initial setup files + echo ' rm /root/.initial_setup' >> $rootdir/root/.bashrc + echo " rm /home/${MY_USERNAME}/.initial_setup" >> $rootdir/root/.bashrc + echo " touch /root/.remove_${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc + echo ' shred -zu ~/login.txt' >> $rootdir/root/.bashrc + END_MESSAGE1=$'Congratulations!' + if [[ $VARIANT != "mesh" ]]; then + END_MESSAGE2=$'\nYour system has now installed\n\nThe onion ssh service is at $SSH_ONION_HOSTNAME\n\nPress any key to reboot and begin using it' + echo ' SSH_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_ssh/hostname)' >> $rootdir/root/.bashrc + else + END_MESSAGE2=$'\nYour system has now installed\n\nPress any key to reboot and begin using it' + fi + echo " dialog --title '$END_MESSAGE1' --msgbox \"$END_MESSAGE2\" 9 50" >> $rootdir/root/.bashrc + echo ' reboot' >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo ' else' >> $rootdir/root/.bashrc + echo ' key=' >> $rootdir/root/.bashrc + echo ' while [[ $key != "x" ]]; do' >> $rootdir/root/.bashrc + INSTALL_FAIL_MESSAGE=$"Install failed. Press x to continue..." + echo " read -n1 -r -p \"${INSTALL_FAIL_MESSAGE}\" key" >> $rootdir/root/.bashrc + echo ' done' >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo ' exit' >> $rootdir/root/.bashrc + echo 'else' >> $rootdir/root/.bashrc + echo ' # Remove default account after install' >> $rootdir/root/.bashrc + echo " if [ -f /root/.remove_${GENERIC_IMAGE_USERNAME} ]; then" >> $rootdir/root/.bashrc + echo " if [ -d /home/${GENERIC_IMAGE_USERNAME} ]; then" >> $rootdir/root/.bashrc + echo " userdel -r ${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc + echo " if [ -d /home/${GENERIC_IMAGE_USERNAME} ]; then" >> $rootdir/root/.bashrc + echo " rm -rf /home/${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc + echo " rm /root/.remove_${GENERIC_IMAGE_USERNAME}" >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo ' fi' >> $rootdir/root/.bashrc + echo 'fi' >> $rootdir/root/.bashrc } continue_installation() { - # If a configuration file exists then run with it - # otherwise the interactive installer can be used - # This is equivalent to installing freedombox-setup on freedombox - if [ $CONFIG_FILENAME ]; then - if [ ${#CONFIG_FILENAME} -gt 2 ]; then - cp $CONFIG_FILENAME $rootdir/root/$PROJECT_NAME.cfg - cat $rootdir/root/$PROJECT_NAME.cfg - chroot "$rootdir" su -c "$PROJECT_NAME -c /root/$PROJECT_NAME.cfg" - root - fi - fi + # If a configuration file exists then run with it + # otherwise the interactive installer can be used + # This is equivalent to installing freedombox-setup on freedombox + if [ $CONFIG_FILENAME ]; then + if [ ${#CONFIG_FILENAME} -gt 2 ]; then + cp $CONFIG_FILENAME $rootdir/root/$PROJECT_NAME.cfg + cat $rootdir/root/$PROJECT_NAME.cfg + chroot "$rootdir" su -c "$PROJECT_NAME -c /root/$PROJECT_NAME.cfg" - root + fi + fi } atheros_wifi() { - firmware_filename="open-ath9k-htc-firmware_1.3-1_all.deb" - firmware_hash='5fea58ffefdf0ef15b504db7fbe3bc078c03e0d927bba64085e4b6f2546102f5' + firmware_filename="open-ath9k-htc-firmware_1.3-1_all.deb" + firmware_hash='5fea58ffefdf0ef15b504db7fbe3bc078c03e0d927bba64085e4b6f2546102f5' - firmware_url="http://us.archive.trisquel.info/trisquel/pool/main/o/open-ath9k-htc-firmware/$firmware_filename" - firmware_tempfile="/tmp/$firmware_filename" - wget "$firmware_url" -O "$rootdir$firmware_tempfile" - downloaded_firmware_hash=$(sha256sum "$rootdir$firmware_tempfile" | awk -F ' ' '{print $1}') - if [[ "$downloaded_firmware_hash" == "$firmware_hash" ]]; then - chroot "$rootdir" dpkg -i "$firmware_tempfile" - else - echo 'WARNING: Atheros Wifi firmware hash does not match. The driver has not been installed.' - fi + firmware_url="http://us.archive.trisquel.info/trisquel/pool/main/o/open-ath9k-htc-firmware/$firmware_filename" + firmware_tempfile="/tmp/$firmware_filename" + wget "$firmware_url" -O "$rootdir$firmware_tempfile" + downloaded_firmware_hash=$(sha256sum "$rootdir$firmware_tempfile" | awk -F ' ' '{print $1}') + if [[ "$downloaded_firmware_hash" == "$firmware_hash" ]]; then + chroot "$rootdir" dpkg -i "$firmware_tempfile" + else + echo 'WARNING: Atheros Wifi firmware hash does not match. The driver has not been installed.' + fi } initialise_mesh() { - if [[ $VARIANT != "mesh" || $DEBIAN_INSTALL_ONLY != "no" ]]; then - return - fi - freedombone-mesh-install -f firewall -r "${rootdir}" - freedombone-mesh-install -f avahi -r "${rootdir}" - freedombone-mesh-install -f batman -r "${rootdir}" - freedombone-mesh-install -f tox_node -r "${rootdir}" - freedombone-mesh-install -f tox_client -r "${rootdir}" - freedombone-mesh-install -f zeronet -r "${rootdir}" + if [[ $VARIANT != "mesh" || $DEBIAN_INSTALL_ONLY != "no" ]]; then + return + fi + freedombone-mesh-install -f firewall -r "${rootdir}" + freedombone-mesh-install -f avahi -r "${rootdir}" + freedombone-mesh-install -f batman -r "${rootdir}" + freedombone-mesh-install -f tox_node -r "${rootdir}" + freedombone-mesh-install -f tox_client -r "${rootdir}" + freedombone-mesh-install -f zeronet -r "${rootdir}" - MESH_SERVICE='mesh-setup.service' - MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE + MESH_SERVICE='mesh-setup.service' + MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE - echo '[Unit]' > $MESH_SETUP_DAEMON - echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON - echo 'After=syslog.target' >> $MESH_SETUP_DAEMON - echo 'After=network.target' >> $MESH_SETUP_DAEMON - echo '[Service]' >> $MESH_SETUP_DAEMON - echo 'Type=simple' >> $MESH_SETUP_DAEMON - echo 'User=root' >> $MESH_SETUP_DAEMON - echo 'Group=root' >> $MESH_SETUP_DAEMON - echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON - echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON - echo '' >> $MESH_SETUP_DAEMON - echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON - echo '' >> $MESH_SETUP_DAEMON - echo '[Install]' >> $MESH_SETUP_DAEMON - echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON - chroot "$rootdir" systemctl enable $MESH_SERVICE + echo '[Unit]' > $MESH_SETUP_DAEMON + echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON + echo 'After=syslog.target' >> $MESH_SETUP_DAEMON + echo 'After=network.target' >> $MESH_SETUP_DAEMON + echo '[Service]' >> $MESH_SETUP_DAEMON + echo 'Type=simple' >> $MESH_SETUP_DAEMON + echo 'User=root' >> $MESH_SETUP_DAEMON + echo 'Group=root' >> $MESH_SETUP_DAEMON + echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON + echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON + echo '' >> $MESH_SETUP_DAEMON + echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON + echo '' >> $MESH_SETUP_DAEMON + echo '[Install]' >> $MESH_SETUP_DAEMON + echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON + chroot "$rootdir" systemctl enable $MESH_SERVICE } configure_wifi() { - if [[ $VARIANT == "mesh" ]]; then - return - fi - if [[ $WIFI_TYPE != 'none' ]]; then - if [ ! $WIFI_PASSPHRASE ]; then - return - fi - if [ ${#WIFI_PASSPHRASE} -lt 2 ]; then - return - fi - chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE -s $WIFI_SSID -t $WIFI_TYPE -p $WIFI_PASSPHRASE --hotspot $HOTSPOT - else - chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE -s $WIFI_SSID -t $WIFI_TYPE --hotspot $HOTSPOT - fi + if [[ $VARIANT == "mesh" ]]; then + return + fi + + if [ -f $WIFI_NETWORKS_FILE ]; then + chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE --networks $WIFI_NETWORKS_FILE + return + fi + + if [[ $WIFI_TYPE != 'none' ]]; then + if [ ! $WIFI_PASSPHRASE ]; then + return + fi + if [ ${#WIFI_PASSPHRASE} -lt 2 ]; then + return + fi + chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE -s $WIFI_SSID -t $WIFI_TYPE -p $WIFI_PASSPHRASE --hotspot $HOTSPOT + else + chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE -s $WIFI_SSID -t $WIFI_TYPE --hotspot $HOTSPOT + fi } # Set to true/false to control if eatmydata is used during build @@ -468,16 +475,16 @@ echo $username:$password | chroot $rootdir /usr/sbin/chpasswd chroot "$rootdir" adduser $username sudo case "$MACHINE" in - virtualbox) - # hide irrelevant console keyboard messages. - echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \ - >> /etc/init.d/rc.local - ;; - qemu) - # hide irrelevant console keyboard messages. - echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \ - >> /etc/init.d/rc.local - ;; + virtualbox) + # hide irrelevant console keyboard messages. + echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \ + >> /etc/init.d/rc.local + ;; + qemu) + # hide irrelevant console keyboard messages. + echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \ + >> /etc/init.d/rc.local + ;; esac set_apt_sources $BUILD_MIRROR @@ -487,19 +494,19 @@ chroot "$rootdir" apt-get clean chroot "$rootdir" apt-get update cat > $rootdir/usr/sbin/policy-rc.d <&1 | \ - tee $rootdir/var/log/${PROJECT_NAME}-image-hardware-setup.log + tee $rootdir/var/log/${PROJECT_NAME}-image-hardware-setup.log rm $rootdir/usr/sbin/policy-rc.d # Set up HRNG for systems known to have one # Otherwise install haveged if [[ "$MACHINE" != "beaglebone" ]]; then - chroot $rootdir apt-get -y install haveged + chroot $rootdir apt-get -y install haveged else - chroot $rootdir apt-get -y install rng-tools - sed -i 's|#HRNGDEVICE=/dev/hwrng|HRNGDEVICE=/dev/hwrng|g' $rootdir/etc/default/rng-tools + chroot $rootdir apt-get -y install rng-tools + sed -i 's|#HRNGDEVICE=/dev/hwrng|HRNGDEVICE=/dev/hwrng|g' $rootdir/etc/default/rng-tools fi # copy u-boot to beginning of image case "$MACHINE" in - beaglebone) - dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/MLO of="$image" \ - count=1 seek=1 conv=notrunc bs=128k - dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/u-boot.img of="$image" \ - count=2 seek=1 conv=notrunc bs=384k - ;; - cubieboard2) - dd if=$rootdir/usr/lib/u-boot/Cubieboard2/u-boot-sunxi-with-spl.bin of="$image" \ - seek=8 conv=notrunc bs=1k - ;; - a20-olinuxino-lime) - dd if=$rootdir/usr/lib/u-boot/A20-OLinuXino-Lime/u-boot-sunxi-with-spl.bin \ - of="$image" seek=8 conv=notrunc bs=1k - ;; + beaglebone) + dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/MLO of="$image" \ + count=1 seek=1 conv=notrunc bs=128k + dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/u-boot.img of="$image" \ + count=2 seek=1 conv=notrunc bs=384k + ;; + cubieboard2) + dd if=$rootdir/usr/lib/u-boot/Cubieboard2/u-boot-sunxi-with-spl.bin of="$image" \ + seek=8 conv=notrunc bs=1k + ;; + a20-olinuxino-lime) + dd if=$rootdir/usr/lib/u-boot/A20-OLinuXino-Lime/u-boot-sunxi-with-spl.bin \ + of="$image" seek=8 conv=notrunc bs=1k + ;; esac if $use_eatmydata ; then - disable_eatmydata_override + disable_eatmydata_override fi set_apt_sources $MIRROR diff --git a/src/freedombone-image-make b/src/freedombone-image-make index c584c3ae..7b394ed9 100755 --- a/src/freedombone-image-make +++ b/src/freedombone-image-make @@ -61,6 +61,7 @@ export WIFI_SSID export WIFI_TYPE export WIFI_PASSPHRASE export WIFI_HOTSPOT +export WIFI_NETWORKS_FILE # Locate vmdebootstrap program fetched in Makefile basedir=`pwd` @@ -181,6 +182,7 @@ sudo sed -i "s|WIFI_SSID=.*|WIFI_SSID=\"${WIFI_SSID}\"|g" $TEMP_CUSTOMISE sudo sed -i "s|WIFI_TYPE=.*|WIFI_TYPE=\"${WIFI_TYPE}\"|g" $TEMP_CUSTOMISE sudo sed -i "s|WIFI_PASSPHRASE=.*|WIFI_PASSPHRASE=\"${WIFI_PASSPHRASE}\"|g" $TEMP_CUSTOMISE sudo sed -i "s|WIFI_HOTSPOT=.*|WIFI_HOTSPOT=\"${WIFI_HOTSPOT}\"|g" $TEMP_CUSTOMISE +sudo sed -i "s|WIFI_NETWORKS_FILE=.*|WIFI_NETWORKS_FILE=\"${WIFI_NETWORKS_FILE}\"|g" $TEMP_CUSTOMISE echo $"starting $VMDEBOOTSTRAP" # Run vmdebootstrap script to create image diff --git a/src/freedombone-wifi b/src/freedombone-wifi index 916d26a6..58f636ab 100755 --- a/src/freedombone-wifi +++ b/src/freedombone-wifi @@ -42,314 +42,314 @@ WIFI_SSID= WIFI_PASSPHRASE= WIFI_HOTSPOT='no' WIFI_CONFIG=/etc/wpa_supplicant/wpa_supplicant.conf -WIFI_FILE=/root/${PROJECT_NAME}-wifi.cfg +WIFI_NETWORKS_FILE=/root/${PROJECT_NAME}-wifi.cfg function wifi_get_psk { - ssid=$1 - passphrase=$2 + ssid=$1 + passphrase=$2 - psk=$(wpa_passphrase "$ssid" "$passphrase" | grep 'psk=' | sed -n 2p | awk -F '=' '{print $2}') - echo $psk + psk=$(wpa_passphrase "$ssid" "$passphrase" | grep 'psk=' | sed -n 2p | awk -F '=' '{print $2}') + echo $psk } function hotspot_off { - if [ ! -f /etc/hostapd/hostapd.conf ]; then - return - fi - systemctl stop hostapd + if [ ! -f /etc/hostapd/hostapd.conf ]; then + return + fi + systemctl stop hostapd - rm /etc/hostapd/hostapd.conf + rm /etc/hostapd/hostapd.conf - if [ -f /etc/network/interfaces_original ]; then - cp /etc/network/interfaces_original /etc/network/interfaces - else - echo '# interfaces(5) file used by ifup(8) and ifdown(8)' > /etc/network/interfaces - echo '# Include files from /etc/network/interfaces.d:' >> /etc/network/interfaces - echo 'source-directory /etc/network/interfaces.d' >> /etc/network/interfaces - fi + if [ -f /etc/network/interfaces_original ]; then + cp /etc/network/interfaces_original /etc/network/interfaces + else + echo '# interfaces(5) file used by ifup(8) and ifdown(8)' > /etc/network/interfaces + echo '# Include files from /etc/network/interfaces.d:' >> /etc/network/interfaces + echo 'source-directory /etc/network/interfaces.d' >> /etc/network/interfaces + fi - systemctl restart network-manager + systemctl restart network-manager } function hotspot_on { - if [ ! -f /etc/default/hostapd ]; then - echo $'/etc/default/hostapd was not found' - exit 67241 - fi - if [ ${#WIFI_PASSPHRASE} -lt 8 ]; then - echo $'Wifi hotspot passphrase is too short' - exit 25719 - fi + if [ ! -f /etc/default/hostapd ]; then + echo $'/etc/default/hostapd was not found' + exit 67241 + fi + if [ ${#WIFI_PASSPHRASE} -lt 8 ]; then + echo $'Wifi hotspot passphrase is too short' + exit 25719 + fi - sed -i 's|#DAEMON_CONF=.*|DAEMON_CONF="/etc/hostapd/hostapd.conf"|g' /etc/default/hostapd + sed -i 's|#DAEMON_CONF=.*|DAEMON_CONF="/etc/hostapd/hostapd.conf"|g' /etc/default/hostapd - echo '### Wireless network name ###' > /etc/hostapd/hostapd.conf - echo "interface=$WIFI_INTERFACE" >> /etc/hostapd/hostapd.conf - echo '' >> /etc/hostapd/hostapd.conf - echo '### Set your bridge name ###' >> /etc/hostapd/hostapd.conf - echo 'bridge=br0' >> /etc/hostapd/hostapd.conf - echo '' >> /etc/hostapd/hostapd.conf - echo 'driver=nl80211' >> /etc/hostapd/hostapd.conf - echo "country_code=UK" >> /etc/hostapd/hostapd.conf - echo "ssid=$WIFI_SSID" >> /etc/hostapd/hostapd.conf - echo 'hw_mode=g' >> /etc/hostapd/hostapd.conf - echo 'channel=6' >> /etc/hostapd/hostapd.conf - echo 'wpa=2' >> /etc/hostapd/hostapd.conf - echo "wpa_passphrase=$WIFI_PASSPHRASE" >> /etc/hostapd/hostapd.conf - echo '' >> /etc/hostapd/hostapd.conf - echo '## Key management algorithms ##' >> /etc/hostapd/hostapd.conf - echo 'wpa_key_mgmt=WPA-PSK' >> /etc/hostapd/hostapd.conf - echo '' >> /etc/hostapd/hostapd.conf - echo '## Set cipher suites (encryption algorithms) ##' >> /etc/hostapd/hostapd.conf - echo '## TKIP = Temporal Key Integrity Protocol' >> /etc/hostapd/hostapd.conf - echo '## CCMP = AES in Counter mode with CBC-MAC' >> /etc/hostapd/hostapd.conf - echo 'wpa_pairwise=TKIP' >> /etc/hostapd/hostapd.conf - echo 'rsn_pairwise=CCMP' >> /etc/hostapd/hostapd.conf - echo '' >> /etc/hostapd/hostapd.conf - echo '## Shared Key Authentication ##' - echo 'auth_algs=1' - echo '' >> /etc/hostapd/hostapd.conf - echo '## Accept all MAC address ###' >> /etc/hostapd/hostapd.conf - echo 'macaddr_acl=0' >> /etc/hostapd/hostapd.conf + echo '### Wireless network name ###' > /etc/hostapd/hostapd.conf + echo "interface=$WIFI_INTERFACE" >> /etc/hostapd/hostapd.conf + echo '' >> /etc/hostapd/hostapd.conf + echo '### Set your bridge name ###' >> /etc/hostapd/hostapd.conf + echo 'bridge=br0' >> /etc/hostapd/hostapd.conf + echo '' >> /etc/hostapd/hostapd.conf + echo 'driver=nl80211' >> /etc/hostapd/hostapd.conf + echo "country_code=UK" >> /etc/hostapd/hostapd.conf + echo "ssid=$WIFI_SSID" >> /etc/hostapd/hostapd.conf + echo 'hw_mode=g' >> /etc/hostapd/hostapd.conf + echo 'channel=6' >> /etc/hostapd/hostapd.conf + echo 'wpa=2' >> /etc/hostapd/hostapd.conf + echo "wpa_passphrase=$WIFI_PASSPHRASE" >> /etc/hostapd/hostapd.conf + echo '' >> /etc/hostapd/hostapd.conf + echo '## Key management algorithms ##' >> /etc/hostapd/hostapd.conf + echo 'wpa_key_mgmt=WPA-PSK' >> /etc/hostapd/hostapd.conf + echo '' >> /etc/hostapd/hostapd.conf + echo '## Set cipher suites (encryption algorithms) ##' >> /etc/hostapd/hostapd.conf + echo '## TKIP = Temporal Key Integrity Protocol' >> /etc/hostapd/hostapd.conf + echo '## CCMP = AES in Counter mode with CBC-MAC' >> /etc/hostapd/hostapd.conf + echo 'wpa_pairwise=TKIP' >> /etc/hostapd/hostapd.conf + echo 'rsn_pairwise=CCMP' >> /etc/hostapd/hostapd.conf + echo '' >> /etc/hostapd/hostapd.conf + echo '## Shared Key Authentication ##' + echo 'auth_algs=1' + echo '' >> /etc/hostapd/hostapd.conf + echo '## Accept all MAC address ###' >> /etc/hostapd/hostapd.conf + echo 'macaddr_acl=0' >> /etc/hostapd/hostapd.conf - if [ ! -f /etc/network/interfaces_original ]; then - if ! grep -q "# wifi enabled" /etc/network/interfaces; then - cp /etc/network/interfaces /etc/network/interfaces_original - fi - fi + if [ ! -f /etc/network/interfaces_original ]; then + if ! grep -q "# wifi enabled" /etc/network/interfaces; then + cp /etc/network/interfaces /etc/network/interfaces_original + fi + fi - echo '# wifi enabled' > /etc/network/interfaces - echo 'auto lo br0' >> /etc/network/interfaces - echo 'iface lo inet loopback' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo "# wireless $WIFI_INTERFACE" >> /etc/network/interfaces - echo "allow-hotplug $WIFI_INTERFACE" >> /etc/network/interfaces - echo "iface $WIFI_INTERFACE inet manual" >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo '# eth0 connected to the ISP router' >> /etc/network/interfaces - echo 'allow-hotplug eth0' >> /etc/network/interfaces - echo 'iface eth0 inet manual' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo '# Setup bridge' >> /etc/network/interfaces - echo 'iface br0 inet static' >> /etc/network/interfaces - echo " bridge_ports $WIFI_INTERFACE eth0" >> /etc/network/interfaces + echo '# wifi enabled' > /etc/network/interfaces + echo 'auto lo br0' >> /etc/network/interfaces + echo 'iface lo inet loopback' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo "# wireless $WIFI_INTERFACE" >> /etc/network/interfaces + echo "allow-hotplug $WIFI_INTERFACE" >> /etc/network/interfaces + echo "iface $WIFI_INTERFACE inet manual" >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo '# eth0 connected to the ISP router' >> /etc/network/interfaces + echo 'allow-hotplug eth0' >> /etc/network/interfaces + echo 'iface eth0 inet manual' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo '# Setup bridge' >> /etc/network/interfaces + echo 'iface br0 inet static' >> /etc/network/interfaces + echo " bridge_ports $WIFI_INTERFACE eth0" >> /etc/network/interfaces - systemctl restart network-manager - systemctl restart hostapd + systemctl restart network-manager + systemctl restart hostapd } function wifi_wpa2_psk { - ssid=$1 - passphrase=$2 + ssid=$1 + passphrase=$2 - if [ ! -f /etc/network/interfaces_original ]; then - if ! grep -q "# wifi enabled" /etc/network/interfaces; then - cp /etc/network/interfaces /etc/network/interfaces_original - fi - fi + if [ ! -f /etc/network/interfaces_original ]; then + if ! grep -q "# wifi enabled" /etc/network/interfaces; then + cp /etc/network/interfaces /etc/network/interfaces_original + fi + fi - echo '# wifi enabled' > /etc/network/interfaces - echo 'auto lo' >> /etc/network/interfaces - echo 'iface lo inet loopback' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'allow-hotplug eth0' >> /etc/network/interfaces - echo 'iface eth0 inet dhcp' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'allow-hotplug wlan0' >> /etc/network/interfaces - echo 'iface wlan0 inet manual' >> /etc/network/interfaces - echo " wpa-roam $WIFI_CONFIG" >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'iface default inet dhcp' >> /etc/network/interfaces + echo '# wifi enabled' > /etc/network/interfaces + echo 'auto lo' >> /etc/network/interfaces + echo 'iface lo inet loopback' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'allow-hotplug eth0' >> /etc/network/interfaces + echo 'iface eth0 inet dhcp' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'allow-hotplug wlan0' >> /etc/network/interfaces + echo 'iface wlan0 inet manual' >> /etc/network/interfaces + echo " wpa-roam $WIFI_CONFIG" >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'iface default inet dhcp' >> /etc/network/interfaces - wpa_passphrase "$ssid" "$passphrase" > $WIFI_CONFIG + wpa_passphrase "$ssid" "$passphrase" > $WIFI_CONFIG - systemctl restart network-manager + systemctl restart network-manager } function wifi_none { - ssid=$1 + ssid=$1 - if [ ! -f /etc/network/interfaces_original ]; then - if ! grep -q "# wifi enabled" /etc/network/interfaces; then - cp /etc/network/interfaces /etc/network/interfaces_original - fi - fi + if [ ! -f /etc/network/interfaces_original ]; then + if ! grep -q "# wifi enabled" /etc/network/interfaces; then + cp /etc/network/interfaces /etc/network/interfaces_original + fi + fi - echo '# wifi enabled' > /etc/network/interfaces - echo 'auto lo' >> /etc/network/interfaces - echo 'iface lo inet loopback' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'allow-hotplug eth0' >> /etc/network/interfaces - echo 'iface eth0 inet dhcp' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'allow-hotplug wlan0' >> /etc/network/interfaces - echo 'iface wlan0 inet manual' >> /etc/network/interfaces - echo " wpa-roam $WIFI_CONFIG" >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'iface default inet dhcp' >> /etc/network/interfaces + echo '# wifi enabled' > /etc/network/interfaces + echo 'auto lo' >> /etc/network/interfaces + echo 'iface lo inet loopback' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'allow-hotplug eth0' >> /etc/network/interfaces + echo 'iface eth0 inet dhcp' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'allow-hotplug wlan0' >> /etc/network/interfaces + echo 'iface wlan0 inet manual' >> /etc/network/interfaces + echo " wpa-roam $WIFI_CONFIG" >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'iface default inet dhcp' >> /etc/network/interfaces - echo 'network={' > $WIFI_CONFIG - echo " ssid=\"${ssid}\"" >> $WIFI_CONFIG - echo ' key_mgmt=NONE' >> $WIFI_CONFIG - echo '}' >> $WIFI_CONFIG + echo 'network={' > $WIFI_CONFIG + echo " ssid=\"${ssid}\"" >> $WIFI_CONFIG + echo ' key_mgmt=NONE' >> $WIFI_CONFIG + echo '}' >> $WIFI_CONFIG - systemctl restart network-manager + systemctl restart network-manager } function create_networks_from_file { - if [ ! -f $WIFI_FILE ]; then - return - fi + if [ ! -f $WIFI_NETWORKS_FILE ]; then + exit 4 + fi - if [ ! -f /etc/network/interfaces_original ]; then - if ! grep -q "# wifi enabled" /etc/network/interfaces; then - cp /etc/network/interfaces /etc/network/interfaces_original - fi - fi + if [ ! -f /etc/network/interfaces_original ]; then + if ! grep -q "# wifi enabled" /etc/network/interfaces; then + cp /etc/network/interfaces /etc/network/interfaces_original + fi + fi - echo '# wifi enabled' > /etc/network/interfaces - echo 'auto lo' >> /etc/network/interfaces - echo 'iface lo inet loopback' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'allow-hotplug eth0' >> /etc/network/interfaces - echo 'iface eth0 inet dhcp' >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'allow-hotplug wlan0' >> /etc/network/interfaces - echo 'iface wlan0 inet manual' >> /etc/network/interfaces - echo " wpa-roam $WIFI_CONFIG" >> /etc/network/interfaces - echo '' >> /etc/network/interfaces - echo 'iface default inet dhcp' >> /etc/network/interfaces + echo '# wifi enabled' > /etc/network/interfaces + echo 'auto lo' >> /etc/network/interfaces + echo 'iface lo inet loopback' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'allow-hotplug eth0' >> /etc/network/interfaces + echo 'iface eth0 inet dhcp' >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'allow-hotplug wlan0' >> /etc/network/interfaces + echo 'iface wlan0 inet manual' >> /etc/network/interfaces + echo " wpa-roam $WIFI_CONFIG" >> /etc/network/interfaces + echo '' >> /etc/network/interfaces + echo 'iface default inet dhcp' >> /etc/network/interfaces - # remove wpa_supplicant.conf if it exists - if [ -f $WIFI_CONFIG ]; then - rm -f $WIFI_CONFIG - fi + # remove wpa_supplicant.conf if it exists + if [ -f $WIFI_CONFIG ]; then + rm -f $WIFI_CONFIG + fi - ctr=0 - while read -r line - do - if [ ${#line} -gt 1 ]; then - if [[ "$line" != '#'* ]]; then - if [ $ctr -eq 0 ]; then - WIFI_SSID="$line" - fi - if [ $ctr -eq 1 ]; then - WIFI_TYPE="$line" - if [[ $WIFI_TYPE == $'none' || $WIFI_TYPE == $'None' ]]; then - echo 'network={' >> $WIFI_CONFIG - echo " ssid=\"${WIFI_SSID}\"" >> $WIFI_CONFIG - echo ' key_mgmt=NONE' >> $WIFI_CONFIG - echo '}' >> $WIFI_CONFIG - ctr=0 - continue - fi - fi - if [ $ctr -eq 2 ]; then - WIFI_PASSPHRASE="$line" - wpa_passphrase "$WIFI_SSID" "$WIFI_PASSPHRASE" >> $WIFI_CONFIG - ctr=0 - continue - fi + ctr=0 + while read -r line + do + if [ ${#line} -gt 1 ]; then + if [[ "$line" != '#'* ]]; then + if [ $ctr -eq 0 ]; then + WIFI_SSID="$line" + fi + if [ $ctr -eq 1 ]; then + WIFI_TYPE="$line" + if [[ $WIFI_TYPE == $'none' || $WIFI_TYPE == $'None' ]]; then + echo 'network={' >> $WIFI_CONFIG + echo " ssid=\"${WIFI_SSID}\"" >> $WIFI_CONFIG + echo ' key_mgmt=NONE' >> $WIFI_CONFIG + echo '}' >> $WIFI_CONFIG + ctr=0 + continue + fi + fi + if [ $ctr -eq 2 ]; then + WIFI_PASSPHRASE="$line" + wpa_passphrase "$WIFI_SSID" "$WIFI_PASSPHRASE" >> $WIFI_CONFIG + ctr=0 + continue + fi - ctr=$((ctr + 1)) - fi - fi - done < $WIFI_FILE + ctr=$((ctr + 1)) + fi + fi + done < $WIFI_NETWORKS_FILE - systemctl restart network-manager + systemctl restart network-manager } function show_help { - echo '' - echo $"${PROJECT_NAME}-wifi -i [interface] -t [type] -s [ssid] -p [passphrase]" - echo '' - echo $'Wifi configuration tool' - echo '' - echo $' --help Show help' - echo $' -i --interface [wlan0|wlan1...] Device name' - echo $' -t --type [wpa2-psk|none] Security type' - echo $' -s --ssid [id] Set SSID' - echo $' -p --passphrase [text] Set passphrase' - echo $' --hotspot [yes|no] Create a hotspot' - echo '' - exit 0 + echo '' + echo $"${PROJECT_NAME}-wifi -i [interface] -t [type] -s [ssid] -p [passphrase]" + echo '' + echo $'Wifi configuration tool' + echo '' + echo $' --help Show help' + echo $' -i --interface [wlan0|wlan1...] Device name' + echo $' -t --type [wpa2-psk|none] Security type' + echo $' -s --ssid [id] Set SSID' + echo $' -p --passphrase [text] Set passphrase' + echo $' --hotspot [yes|no] Create a hotspot' + echo '' + exit 0 } while [[ $# > 1 ]] do - key="$1" + key="$1" - case $key in - --help) - show_help - ;; - -i|--if|--interface) - shift - WIFI_INTERFACE=${1} - ;; - -t|--type) - shift - WIFI_TYPE=${1} - ;; - -s|--ssid) - shift - WIFI_SSID=${1} - ;; - -p|--pass|--passphrase) - shift - WIFI_PASSPHRASE=${1} - ;; - --hostpot) - shift - WIFI_HOTSPOT=${1} - ;; - --config) - shift - WIFI_FILE=${1} - ;; - *) - # unknown option - ;; - esac - shift + case $key in + --help) + show_help + ;; + -i|--if|--interface) + shift + WIFI_INTERFACE=${1} + ;; + -t|--type) + shift + WIFI_TYPE=${1} + ;; + -s|--ssid) + shift + WIFI_SSID=${1} + ;; + -p|--pass|--passphrase) + shift + WIFI_PASSPHRASE=${1} + ;; + --hostpot) + shift + WIFI_HOTSPOT=${1} + ;; + --networks) + shift + WIFI_NETWORKS_FILE=${1} + ;; + *) + # unknown option + ;; + esac + shift done -if [ -f $WIFI_FILE ]; then - create_networks_from_file - exit 0 +if [ -f $WIFI_NETWORKS_FILE ]; then + create_networks_from_file + exit 0 fi if [ ! $WIFI_SSID ]; then - echo $'No SSID given' - exit 1 + echo $'No SSID given' + exit 1 fi if [[ $WIFI_HOTSPOT != 'no' ]]; then - hotspot_on - exit 0 + hotspot_on + exit 0 else - hotspot_off + hotspot_off fi if [[ $WIFI_TYPE != 'none' ]]; then - if [ ! $WIFI_PASSPHRASE ]; then - echo $'No wifi passphrase was given' - exit 2 - fi + if [ ! $WIFI_PASSPHRASE ]; then + echo $'No wifi passphrase was given' + exit 2 + fi fi if [[ $WIFI_TYPE == 'wpa2-psk' ]]; then - if [ ! -d /etc/wpa_supplicant ]; then - echo $'wpasupplicant package is not installed' - exit 3 - fi - wifi_wpa2_psk "$WIFI_SSID" "$WIFI_PASSPHRASE" - exit 0 + if [ ! -d /etc/wpa_supplicant ]; then + echo $'wpasupplicant package is not installed' + exit 3 + fi + wifi_wpa2_psk "$WIFI_SSID" "$WIFI_PASSPHRASE" + exit 0 fi if [[ $WIFI_TYPE == 'none' ]]; then - wifi_none "$WIFI_SSID" - exit 0 + wifi_none "$WIFI_SSID" + exit 0 fi exit 0