2015-11-21 00:54:24 +01:00
#!/bin/bash
2015-11-20 17:09:21 +01:00
#
2015-11-21 12:25:32 +01:00
# .---. . .
# | | |
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
#
# Freedom in the Cloud
#
2015-11-20 17:09:21 +01:00
# Based on bin/freedombox-customize from freedom-maker
#
2015-11-21 12:25:32 +01:00
# License
# =======
#
2015-11-20 17:09:21 +01:00
# This program is free software: you can redistribute it and/or modify
2016-02-13 23:09:27 +01:00
# it under the terms of the GNU Affero General Public License as published by
2015-11-20 17:09:21 +01:00
# 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
2016-02-13 23:09:27 +01:00
# GNU Affero General Public License for more details.
2015-11-20 17:09:21 +01:00
#
2016-02-13 23:09:27 +01:00
# You should have received a copy of the GNU Affero General Public License
2015-11-20 17:09:21 +01:00
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
set -x
2015-11-21 12:56:40 +01:00
PROJECT_NAME='freedombone'
2016-01-14 19:00:25 +01:00
INSTALL_DIR=/root/build
2016-01-16 15:51:35 +01:00
COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
2015-11-27 12:42:16 +01:00
2016-01-25 18:45:37 +01:00
PROJECT_REPO="https://github.com/bashrc/${PROJECT_NAME}"
2016-05-28 14:42:50 +02:00
VARIANT='full'
2015-12-03 15:40:38 +01:00
# username created by default within a debian image
GENERIC_IMAGE_USERNAME='fbone'
2015-11-27 17:52:23 +01:00
export TEXTDOMAIN=${PROJECT_NAME}-image-customise
2015-11-27 12:42:16 +01:00
export TEXTDOMAINDIR="/usr/share/locale"
2015-11-21 12:56:40 +01:00
2015-11-30 15:25:09 +01:00
# Whether to minimise the number of decisions during interactive install
MINIMAL_INSTALL="yes"
2015-11-21 11:29:10 +01:00
MY_USERNAME='debian'
2015-12-01 09:32:30 +01:00
MY_PASSWORD="${PROJECT_NAME}"
2015-11-20 22:43:03 +01:00
2016-06-04 15:25:46 +02:00
# Minimum number of characters in a password
MINIMUM_PASSWORD_LENGTH=10
2015-11-20 22:43:03 +01:00
# IP address of the router (gateway)
ROUTER_IP_ADDRESS="192.168.1.254"
# The fixed IP address of the Beaglebone Black on your local network
BOX_IP_ADDRESS="192.168.1.55"
# DNS
NAMESERVER1='213.73.91.35'
NAMESERVER2='85.214.20.141'
2015-11-21 13:59:19 +01:00
# optional configuration file containing freedombone settings
CONFIG_FILENAME=
2015-11-21 15:33:39 +01:00
# Optional ssh public key to allow
SSH_PUBKEY="no"
2015-11-23 11:33:45 +01:00
# Whether this is a generic image for mass redistribution on the interwebs
GENERIC_IMAGE="no"
2015-12-04 13:09:07 +01:00
# default SSH port
SSH_PORT=2222
2016-01-16 15:51:35 +01:00
# for mesh installs
TRACKER_PORT=6969
2015-12-31 13:00:55 +01:00
# Whether sites are accessible only within a Tor browser
ONION_ONLY="no"
2016-03-30 11:35:07 +02:00
# Whether to only install debian and nothing else
DEBIAN_INSTALL_ONLY="no"
2016-04-26 16:41:35 +02:00
# wifi settings
2016-01-15 15:41:59 +01:00
WIFI_INTERFACE='wlan0'
2016-04-26 16:41:35 +02:00
WIFI_SSID=
2016-05-13 19:19:34 +02:00
WIFI_TYPE='wpa2-psk'
2016-04-26 16:41:35 +02:00
WIFI_PASSPHRASE=
WIFI_HOTSPOT='no'
2016-04-26 23:38:03 +02:00
WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
2016-01-15 15:41:59 +01:00
2016-06-23 12:04:04 +02:00
# Whether to install non-free wifi drivers for the mesh client
INSECURE='no'
2016-06-23 23:16:32 +02:00
# optional desktop background image for mesh
2016-08-31 15:19:16 +02:00
MESH_DESKTOP_BACKGROUND_IMAGE=/usr/local/share/${PROJECT_NAME}_mesh_initial_background.png
2016-06-23 23:16:32 +02:00
2016-06-25 14:08:31 +02:00
# The browser application to use
2016-09-08 18:12:24 +02:00
BROWSER=midori
2016-06-25 14:08:31 +02:00
2016-06-26 00:46:05 +02:00
MESH_INSTALL_DIR=/var/lib
2016-07-22 14:15:18 +02:00
# for mesh installs whether to delete all data and generate
# a new identity at every shutdown/boot
AMNESIC='no'
2016-08-08 14:01:55 +02:00
# defines the initial keyboard layout
KEYBOARD_MAP='gb'
2016-08-08 22:54:04 +02:00
# Strings used for setting the username
MESH_TITLE=$"Freedombone Mesh"
MESH_SET_USERNAME=$"Welcome to the Freedombone mesh.\n\nThe first thing you will need to do is set a username so that other peers can find you."
2016-08-10 22:20:19 +02:00
# Whether to enable zeronet on the mesh
ENABLE_ZERONET=
2016-08-24 22:04:01 +02:00
MESH_TEXT_EDITOR='pluma'
2016-09-23 00:03:02 +02:00
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
2016-08-13 11:12:23 +02:00
function configure_backports {
echo "deb http://${DEBIAN_REPO}/debian/ ${DEBIAN_VERSION}-backports main" >> $rootdir/etc/apt/sources.list
}
function configure_contrib_repo {
if ! grep -q "contrib" $rootdir/etc/apt/sources.list; then
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/sed -i "s| main| main contrib|g" /etc/apt/sources.list
2016-08-13 11:12:23 +02:00
fi
}
2015-11-20 17:09:21 +01:00
enable_eatmydata_override() {
2016-09-23 00:03:02 +02:00
chroot $rootdir apt-get install -y eatmydata
2016-08-03 16:44:59 +02:00
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 <<EOF
2016-04-28 15:36:45 +02:00
Dir::Bin::dpkg "/var/tmp/dpkg-eatmydata";
EOF
2016-08-03 16:44:59 +02:00
else
echo $"error: unable to find /usr/bin/eatmydata after installing the eatmydata package"
fi
2015-11-20 17:09:21 +01:00
}
disable_eatmydata_override() {
2016-08-03 16:44:59 +02:00
for override in \
/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata \
/var/tmp/dpkg-eatmydata ; do
echo $"info: Removing apt config to call dpkg via eatmydata"
if [ -f $rootdir$override ] ; then
rm -f $rootdir$override
else
echo $"warning: missing $rootdir$override"
fi
done
sync # Flush file buffers before continuing
2015-11-20 17:09:21 +01:00
}
set_apt_sources() {
2016-08-03 16:44:59 +02:00
NEW_MIRROR="$1"
COMPONENTS="main"
2015-11-20 17:09:21 +01:00
2016-08-03 16:44:59 +02:00
cat <<EOF > etc/apt/sources.list
2016-04-28 15:36:45 +02:00
deb $NEW_MIRROR $SUITE $COMPONENTS
deb-src $NEW_MIRROR $SUITE $COMPONENTS
2015-11-20 17:09:21 +01:00
2016-04-28 15:36:45 +02:00
#deb http://security.debian.org/ $SUITE/updates main
#deb-src http://security.debian.org/ $SUITE/updates main
EOF
2015-11-20 17:09:21 +01:00
}
2015-11-22 12:12:38 +01:00
configure_networking() {
2016-08-03 16:44:59 +02:00
if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then
return
fi
2016-05-27 15:18:02 +02:00
2016-08-03 16:44:59 +02:00
if [[ $GENERIC_IMAGE == "no" ]]; then
echo "# This file describes the network interfaces available on your system
2015-11-21 14:12:31 +01:00
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
2016-08-03 16:44:59 +02:00
address $BOX_IP_ADDRESS
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
# The secondary network interface
#auto eth1
#iface eth1 inet dhcp
# 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
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
if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" ]]; then
# change the motd to show further install instructions
echo $"
2015-11-22 14:52:42 +01:00
.---. . .
| | |
|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
| | (.-' (.-' ( | ( )| | | | )( )| | (.-'
' ' --' --' -' - -' ' ' -' -' -' ' - --'
2016-08-03 16:44:59 +02:00
Initial base install
2015-11-22 14:52:42 +01:00
Your system is not yet installed. To complete the process run the
following commands, then enter your details.
2015-11-21 14:12:31 +01:00
2016-08-03 16:44:59 +02:00
sudo su
${PROJECT_NAME} menuconfig
2015-11-21 14:12:31 +01:00
2015-11-22 14:52:42 +01:00
" > $rootdir/etc/motd
2016-08-03 16:44:59 +02:00
else
echo $"
2016-06-24 13:20:05 +02:00
.---. . .
| | |
|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
| | (.-' (.-' ( | ( )| | | | )( )| | (.-'
' ' --' --' -' - -' ' ' -' -' -' ' - --'
2016-08-03 16:44:59 +02:00
Freedom in the Mesh
2016-06-24 13:20:05 +02:00
" > $rootdir/etc/motd
2016-08-03 16:44:59 +02:00
fi
2015-11-21 14:12:31 +01:00
}
2015-11-22 12:12:38 +01:00
configure_ssh() {
2016-08-11 23:39:20 +02:00
if [[ $VARIANT == "mesh" || $VARIANT == "meshclient" || $VARIANT == "meshusb" ]]; then
2016-08-11 23:37:53 +02:00
return
fi
2016-08-03 16:44:59 +02:00
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
2016-09-23 00:03:02 +02:00
chroot $rootdir /bin/chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh
2016-08-03 16:44:59 +02:00
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
2015-11-21 15:33:39 +01:00
}
2015-11-22 14:43:23 +01:00
admin_user_sudo() {
2016-08-03 16:44:59 +02:00
echo "$MY_USERNAME ALL=(ALL) ALL" >> $rootdir/etc/sudoers
2015-11-22 14:43:23 +01:00
}
2015-11-23 11:33:45 +01:00
create_generic_image() {
2016-08-03 16:44:59 +02:00
if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then
return
fi
if [[ $GENERIC_IMAGE == "no" ]]; then
return
fi
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" && $VARIANT != "meshclient" && $VARIANT != "meshusb" ]]; then
CONFIG_FILENAME=
else
touch $rootdir/root/.initial_mesh_setup
fi
# Stick with the existing login for mesh clients
if [[ $VARIANT == "meshclient" || $VARIANT == "meshusb" ]]; then
return
fi
# The presence of this file indicates that the initial
# setup has not yet been completed
touch $rootdir/home/$MY_USERNAME/.initial_setup
2016-09-23 00:03:02 +02:00
chroot $rootdir /bin/chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.initial_setup
2016-08-03 16:44:59 +02:00
touch $rootdir/root/.initial_setup
cat >> $rootdir/home/$MY_USERNAME/.bashrc <<EOF
2016-04-28 15:36:45 +02:00
# initial setup of the system
if [ -f ~/.initial_setup ]; then
2016-08-03 16:44:59 +02:00
clear
echo "
2015-11-23 23:03:17 +01:00
.---. . .
| | |
|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
| | (.-' (.-' ( | ( )| | | | )( )| | (.-'
' ' --' --' -' - -' ' ' -' -' -' ' - --'
2016-08-03 16:44:59 +02:00
Initial setup process
2015-11-23 23:03:17 +01:00
2016-08-03 16:44:59 +02:00
Please enter your password a second time.
2015-11-23 23:03:17 +01:00
"
2016-08-03 16:44:59 +02:00
sudo su
2016-04-28 15:36:45 +02:00
fi
EOF
2016-04-28 10:58:38 +02:00
2016-10-13 12:44:53 +02:00
echo "MY_USERNAME=${MY_USERNAME}" >> $rootdir/root/.bashrc
echo "SSH_PORT=${SSH_PORT}" >> $rootdir/root/.bashrc
2016-08-03 16:44:59 +02:00
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 -n ' NEW_USER_PASSWORD="$(openssl rand -base64 30 | cut -c1-' >> $rootdir/root/.bashrc
2016-10-14 11:34:05 +02:00
echo "${DEFAULT_PASSWORD_LENGTH})\"" >> $rootdir/root/.bashrc
2016-08-03 16:44:59 +02:00
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 ' 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
# 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" && $VARIANT != "meshclient" && $VARIANT != "meshusb" && $VARIANT != "usb" ]]; 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" && $VARIANT != "meshclient" && $VARIANT != "meshusb" && $VARIANT != "usb" ]]; then
2016-10-11 23:27:05 +02:00
END_MESSAGE2=$'\nYour system has now installed\n\nThe onion ssh service is at:\n\n ssh ${MY_USERNAME}@${SSH_ONION_HOSTNAME} -p ${SSH_PORT}\n\nTo copy the above address hold down the shift key and double left click on it, then right click and select "copy".\n\nPress any key to reboot and begin using the system'
2016-08-03 16:44:59 +02:00
echo ' SSH_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_ssh/hostname)' >> $rootdir/root/.bashrc
2016-10-08 12:28:36 +02:00
echo ' if [ ${#SSH_ONION_HOSTNAME} -lt 2 ]; then' >> $rootdir/root/.bashrc
echo ' exit 62392' >> $rootdir/root/.bashrc
echo ' fi' >> $rootdir/root/.bashrc
2016-10-11 23:27:05 +02:00
END_MESSAGE_HEIGHT=16
2016-08-03 16:44:59 +02:00
else
END_MESSAGE2=$'\nYour system has now installed\n\nPress any key to reboot and begin using it'
2016-10-11 23:27:05 +02:00
END_MESSAGE_HEIGHT=12
2016-08-03 16:44:59 +02:00
fi
2016-10-11 23:27:05 +02:00
echo " dialog --title '$END_MESSAGE1' --msgbox \"$END_MESSAGE2\" ${END_MESSAGE_HEIGHT} 60" >> $rootdir/root/.bashrc
2016-08-03 16:44:59 +02:00
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
2015-11-23 11:33:45 +01:00
}
2015-11-22 12:12:38 +01:00
continue_installation() {
2016-08-03 16:44:59 +02:00
# 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
2015-11-21 14:12:31 +01:00
}
2015-12-22 12:07:00 +01:00
atheros_wifi() {
2016-08-03 16:44:59 +02:00
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
2015-12-22 12:07:00 +01:00
}
2016-05-28 13:16:00 +02:00
configure_wifi() {
2016-08-03 16:44:59 +02:00
if [[ $VARIANT == "mesh" || $VARIANT == "meshclient" || $VARIANT == "meshusb" ]]; 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} -lt 2 ]; then
return
fi
chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE -s $WIFI_SSID -t $WIFI_TYPE -p $WIFI_PASSPHRASE --hotspot $WIFI_HOTSPOT
else
chroot "$rootdir" ${PROJECT_NAME}-wifi -i $WIFI_INTERFACE -s $WIFI_SSID -t $WIFI_TYPE --hotspot $WIFI_HOTSPOT
fi
2016-05-28 13:16:00 +02:00
}
##############################################################################
# Mesh networking
##############################################################################
# for mesh installs
TRACKER_PORT=6969
WIFI_CHANNEL=2
# B.A.T.M.A.N settings
BATMAN_CELLID='02:BA:00:00:03:01'
WIFI_SSID='mesh'
# To avoid confusions these are obtained from the main project file
TOXID_REPO=
TOX_PORT=
TOXCORE_REPO=
TOXIC_REPO=
TOXCORE_COMMIT=
TOXIC_COMMIT=
# These are some default nodes, but you can replace them with trusted nodes
# as you prefer. See https://wiki.tox.im/Nodes
TOX_NODES=
#TOX_NODES=(
# '192.254.75.102,2607:5600:284::2,33445,951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F,Tox RELENG,US'
# '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
#)
# To avoid confusions these are obtained from the main project file
ZERONET_REPO=
ZERONET_COMMIT=
ZERONET_PORT=
2016-06-25 17:51:04 +02:00
ZERONET_BLOG_REPO=
ZERONET_BLOG_COMMIT=
ZERONET_MAIL_REPO=
ZERONET_MAIL_COMMIT=
ZERONET_FORUM_REPO=
ZERONET_FORUM_COMMIT=
ZERONET_ID_REPO=
ZERONET_ID_COMMIT=
2016-05-28 13:16:00 +02:00
# Directory where source code is downloaded and compiled
INSTALL_DIR=$HOME/build
2016-07-12 09:27:11 +02:00
INSTALLING_MESH=
2016-06-25 17:51:04 +02:00
2016-01-11 12:27:08 +01:00
initialise_mesh() {
2016-08-03 16:44:59 +02:00
if [[ $VARIANT != "mesh" && $VARIANT != "meshclient" && $VARIANT != "meshusb" ]]; then
return
fi
if [[ $DEBIAN_INSTALL_ONLY != "no" ]]; then
return
fi
if [[ $INSECURE == $'yes' ]]; then
echo '*********************************************************'
echo $'WARNING: non-free wifi drivers are being installed.'
echo $' This may compromise the security of your system.'
echo '*********************************************************'
# enable non-free repo
if ! grep -q "non-free" $rootdir/etc/apt/sources.list; then
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/sed -i "s| main| main non-free|g" /etc/apt/sources.list
2016-08-03 16:44:59 +02:00
fi
chroot "$rootdir" apt-get update
# install proprietary wifi drivers
# see https://wiki.debian.org/iwlwifi
chroot "$rootdir" apt-get -y install firmware-iwlwifi firmware-b43-installer firmware-brcm80211
fi
INSTALLING_MESH=1
configure_firewall
install_avahi
install_batman
install_tomb
2016-08-29 13:41:26 +02:00
#install_tahoelafs
2016-08-26 17:38:53 +02:00
#install_librevault
2016-09-03 16:36:44 +02:00
install_ipfs
2016-08-03 16:44:59 +02:00
install_tox
install_web_server
2016-09-07 21:44:32 +02:00
install_blogstatic
2016-08-10 22:20:19 +02:00
if [ $ENABLE_ZERONET ]; then
install_zeronet
fi
2016-08-03 16:44:59 +02:00
MESH_SERVICE='mesh-setup.service'
MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
MESH_STARTUP_PARAMS="${MY_USERNAME}"
if [[ $AMNESIC != 'no' ]]; then
MESH_STARTUP_PARAMS="${MY_USERNAME} amnesic"
fi
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 ${MESH_STARTUP_PARAMS} > /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
2016-01-11 12:27:08 +01:00
}
2016-06-06 18:31:23 +02:00
# User interface for USB drive installs ######################################
2016-06-24 19:45:52 +02:00
function mesh_client_startup_applications {
2016-08-03 16:44:59 +02:00
if [ ! -d $rootdir/home/$MY_USERNAME/Desktop ]; then
mkdir -p $rootdir/home/$MY_USERNAME/Desktop
fi
if [ ! -d $rootdir/home/$MY_USERNAME/.config/autostart ]; then
mkdir -p $rootdir/home/$MY_USERNAME/.config/autostart
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
2016-08-03 16:44:59 +02:00
fi
START_DESKTOP=$rootdir/home/$MY_USERNAME/mesh-desktop.sh
2016-08-09 10:11:43 +02:00
FIRST_BOOT=/home/$MY_USERNAME/.first_boot
2016-08-28 21:51:45 +02:00
TAHOE_COMMAND="cd /var/lib/tahoelafs && venv/bin/tahoe"
2016-08-03 16:44:59 +02:00
echo '#!/bin/bash' > $START_DESKTOP
2016-08-08 14:01:55 +02:00
echo "setxkbmap ${KEYBOARD_MAP}" > $START_DESKTOP
2016-08-03 16:44:59 +02:00
echo 'dconf write /org/mate/caja/desktop/volumes-visible false' >> $START_DESKTOP
echo 'dconf write /org/mate/caja/desktop/computer-icon-visible false' >> $START_DESKTOP
echo 'dconf write /org/mate/caja/desktop/home-icon-visible false' >> $START_DESKTOP
echo 'dconf write /org/mate/caja/desktop/network-icon-visible false' >> $START_DESKTOP
echo 'dconf write /org/mate/caja/desktop/trash-icon-visible false' >> $START_DESKTOP
echo 'dconf write /org/mate/caja/desktop/volumes-visible false' >> $START_DESKTOP
echo 'dconf write /org/mate/desktop/media-handling/automount-open false' >> $START_DESKTOP
2016-08-24 13:54:43 +02:00
echo 'dconf write /org/mate/screensaver/lock-enabled false' >> $START_DESKTOP
echo 'dconf write /org/mate/power-manager/lock-keyring-suspend false' >> $START_DESKTOP
echo 'dconf write /org/mate/power-manager/lock-suspend false' >> $START_DESKTOP
echo 'dconf write /org/mate/power-manager/lock-use-screensaver false' >> $START_DESKTOP
echo 'dconf write /org/mate/power-manager/lock-blank-screen false' >> $START_DESKTOP
echo 'dconf write /org/mate/power-manager/lock-hibernate false' >> $START_DESKTOP
echo 'dconf write /org/mate/power-manager/lock-keyring-hibernate false' >> $START_DESKTOP
2016-08-26 17:38:53 +02:00
echo 'dconf write /org/mate/desktop/peripherals/touchpad/scroll-method 2' >> $START_DESKTOP
2016-08-05 10:25:01 +02:00
echo "touch /home/$MY_USERNAME/.dbus/Xdbus" >> $START_DESKTOP
echo "chmod 600 /home/$MY_USERNAME/.dbus/Xdbus" >> $START_DESKTOP
echo "env | grep DBUS_SESSION_BUS_ADDRESS > /home/$MY_USERNAME/.dbus/Xdbus" >> $START_DESKTOP
echo "echo 'export DBUS_SESSION_BUS_ADDRESS' >> /home/$MY_USERNAME/.dbus/Xdbus" >> $START_DESKTOP
2016-08-07 21:26:46 +02:00
2016-08-31 15:19:16 +02:00
echo '' >> $START_DESKTOP
echo "amixer set 'Master' unmute" >> $START_DESKTOP
echo "amixer set 'Master' 50%" >> $START_DESKTOP
echo '' >> $START_DESKTOP
2016-08-09 10:11:43 +02:00
echo '' >> $START_DESKTOP
echo "if [ ! -f $FIRST_BOOT ]; then" >> $START_DESKTOP
2016-08-28 21:51:45 +02:00
echo " $TAHOE_COMMAND start" >> $START_DESKTOP
2016-08-09 10:11:43 +02:00
echo ' exit 0' >> $START_DESKTOP
echo 'fi' >> $START_DESKTOP
echo '' >> $START_DESKTOP
2016-09-12 12:15:11 +02:00
echo 'INITIAL_TOX_USERNAME=""' >> $START_DESKTOP
echo 'while [ ${#INITIAL_TOX_USERNAME} -eq 0 ]; do' >> $START_DESKTOP
2016-08-09 10:11:43 +02:00
echo ' data=$(tempfile 2>/dev/null)' >> $START_DESKTOP
echo ' trap "rm -f $data" 0 1 2 5 15' >> $START_DESKTOP
echo -n " dialog --title \"${MESH_TITLE}\" " >> $START_DESKTOP
echo -n "--backtitle \"${MESH_TITLE}\" " >> $START_DESKTOP
echo -n "--inputbox \"${MESH_SET_USERNAME}\" 12 60 Anon " >> $START_DESKTOP
echo '2>$data' >> $START_DESKTOP
echo ' sel=$?' >> $START_DESKTOP
echo ' case $sel in' >> $START_DESKTOP
echo ' 0)' >> $START_DESKTOP
echo ' INITIAL_TOX_USERNAME=$(<$data)' >> $START_DESKTOP
echo ' ;;' >> $START_DESKTOP
echo ' esac' >> $START_DESKTOP
echo 'done' >> $START_DESKTOP
echo '' >> $START_DESKTOP
echo 'toxid --setuser "$INITIAL_TOX_USERNAME"' >> $START_DESKTOP
echo '' >> $START_DESKTOP
2016-08-28 21:51:45 +02:00
echo "if [ -f /home/$MY_USERNAME/.tahoe/tahoe.cfg ]; then" >> $START_DESKTOP
echo " sed -i 's|nickname =.*|nickname = \$INITIAL_TOX_USERNAME|g' /home/$MY_USERNAME/.tahoe/tahoe.cfg" >> $START_DESKTOP
echo " $TAHOE_COMMAND restart" >> $START_DESKTOP
echo 'fi' >> $START_DESKTOP
echo '' >> $START_DESKTOP
2016-08-09 10:11:43 +02:00
echo "rm -f $FIRST_BOOT" >> $START_DESKTOP
echo '' >> $START_DESKTOP
echo 'exit 0' >> $START_DESKTOP
2016-08-03 16:44:59 +02:00
chmod +x $START_DESKTOP
START_DESKTOP2=$rootdir/home/$MY_USERNAME/.config/autostart/mesh-start.desktop
echo '[Desktop Entry]' > $START_DESKTOP2
echo 'Type=Application' >> $START_DESKTOP2
echo 'Name=Mesh start desktop script' >> $START_DESKTOP2
echo "Exec=bash -c '~/mesh-desktop.sh'" >> $START_DESKTOP2
echo 'X-GNOME-Autostart-enabled=true' >> $START_DESKTOP2
chmod +x $START_DESKTOP2
2016-08-08 22:54:04 +02:00
START_DESKTOP3=$rootdir/home/$MY_USERNAME/.config/autostart/set_username.desktop
echo '[Desktop Entry]' > $START_DESKTOP3
echo 'Version=1.0' >> $START_DESKTOP3
echo 'Name=Set Username' >> $START_DESKTOP3
echo 'Type=Application' >> $START_DESKTOP3
echo 'Comment=Set username' >> $START_DESKTOP3
2016-08-10 09:01:01 +02:00
echo "Exec=mate-terminal -e \"bash -c /home/${MY_USERNAME}/mesh-desktop.sh\"" >> $START_DESKTOP3
2016-08-08 22:54:04 +02:00
echo 'Icon=user-away' >> $START_DESKTOP3
echo 'Terminal=false' >> $START_DESKTOP3
echo 'Categories=Application;' >> $START_DESKTOP3
chmod +x $START_DESKTOP3
2016-06-24 20:22:23 +02:00
}
function mesh_desktop_icons {
2016-08-03 16:44:59 +02:00
if [ ! -d $rootdir/home/$MY_USERNAME/Desktop ]; then
mkdir -p $rootdir/home/$MY_USERNAME/Desktop
fi
# Terminal
2016-08-03 17:24:55 +02:00
#echo '[Desktop Entry]' > $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'Name=MATE Terminal' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'Type=Application' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'Comment=Use the command line' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'TryExec=mate-terminal' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'Exec=mate-terminal' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'Icon=terminal' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
#echo 'StartupNotify=true' >> $rootdir/home/$MY_USERNAME/Desktop/terminal.desktop
2016-08-03 16:44:59 +02:00
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop
2016-06-24 19:45:52 +02:00
}
2016-06-06 18:31:23 +02:00
function configure_user_interface {
2016-08-03 16:44:59 +02:00
if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" && $VARIANT != "usb" ]]; then
return
fi
# desktop
chroot "$rootdir" apt-get -y install mate-desktop-environment
# tool to change desktop settings from command line
chroot "$rootdir" apt-get -y install dconf-cli dconf-gsettings-backend dbus dbus-x11
# for tomb
chroot "$rootdir" apt-get -y install pinentry-gtk2
# for tox video
chroot "$rootdir" apt-get -y install ffmpeg cheese v4l-utils
# to provide notifications
chroot "$rootdir" apt-get -y install libnotify-bin
2016-08-22 20:57:45 +02:00
# for video/audio
2016-08-19 11:14:10 +02:00
chroot "$rootdir" apt-get -y install libtheora-bin libvorbis-dev v4l-utils
2016-08-22 20:57:45 +02:00
# a sane editor
chroot "$rootdir" apt-get -y install emacs24
2016-09-10 15:58:51 +02:00
# for wifi monitoring
chroot "$rootdir" apt-get -y install horst
2016-08-31 15:19:16 +02:00
# for sound level control
chroot "$rootdir" apt-get -y install alsa-utils
2016-09-08 18:24:25 +02:00
# to play various media types
chroot "$rootdir" apt-get -y install vlc
2016-08-29 13:45:11 +02:00
# android adb to allow phones to be connected and for example transfer photos/documents
chroot "$rootdir" apt-get -y install android-tools-adb
2016-08-11 23:26:27 +02:00
# Produce a text file on the desktop listing users on the mesh
cat <<EOF > $rootdir/usr/bin/list-tox-users
#!/bin/bash
2016-08-23 18:59:54 +02:00
users_list=\$(lstox | awk -F ' ' '{\$1=""; print \$0}' | sed -e 's/^[[:space:]]*//' | sort -d)
2016-08-24 10:09:12 +02:00
if [ ! \$users_list ]; then
no_of_users=0
else
no_of_users=\$(echo "\$users_list" | wc -l)
fi
2016-08-23 20:58:18 +02:00
if [ \$no_of_users -gt 0 ]; then
2016-09-12 16:16:55 +02:00
echo "\$users_list" > /tmp/Users.txt
chown $MY_USERNAME:$MY_USERNAME /tmp/Users.txt
2016-08-24 22:04:01 +02:00
echo 'showing_users=\$(ps aux | grep $MESH_TEXT_EDITOR | grep "Users.txt")' > /home/$MY_USERNAME/showusers
echo 'if [ \${#showing_users} -eq 0 ]; then' >> /home/$MY_USERNAME/showusers
2016-09-12 16:16:55 +02:00
echo ' $MESH_TEXT_EDITOR /tmp/Users.txt' >> /home/$MY_USERNAME/showusers
2016-08-24 22:04:01 +02:00
echo 'fi' >> /home/$MY_USERNAME/showusers
echo 'exit 0' >> /home/$MY_USERNAME/showusers
chmod +x /home/$MY_USERNAME/showusers
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/showusers
2016-08-23 18:59:54 +02:00
echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/Users.desktop
2016-08-23 20:58:18 +02:00
if [ \$no_of_users -lt 2 ]; then
2016-08-24 21:22:34 +02:00
echo "Name=\$no_of_users Other User" >> /home/$MY_USERNAME/Desktop/Users.desktop
2016-08-23 18:59:54 +02:00
else
2016-08-24 21:22:34 +02:00
echo "Name=\$no_of_users Other Users" >> /home/$MY_USERNAME/Desktop/Users.desktop
2016-08-23 18:59:54 +02:00
fi
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/Users.desktop
echo 'Comment=List of users' >> /home/$MY_USERNAME/Desktop/Users.desktop
2016-08-24 22:04:01 +02:00
echo 'Exec=bash /home/$MY_USERNAME/showusers' >> /home/$MY_USERNAME/Desktop/Users.desktop
2016-09-22 18:56:47 +02:00
echo 'Icon=/usr/share/$PROJECT_NAME/avatars/otheruser.png' >> /home/$MY_USERNAME/Desktop/Users.desktop
2016-08-23 18:59:54 +02:00
echo 'StartupNotify=false' >> /home/$MY_USERNAME/Desktop/Users.desktop
chmod +x /home/$MY_USERNAME/Desktop/Users.desktop
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/Users.desktop
2016-09-12 16:21:03 +02:00
if [ -f /tmp/.ipfs-users ]; then
2016-09-06 23:30:41 +02:00
echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/sites.desktop
2016-09-04 19:50:13 +02:00
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/sites.desktop
2016-09-06 23:30:41 +02:00
echo "Name=Visit a site" >> /home/$MY_USERNAME/Desktop/sites.desktop
2016-09-04 19:50:13 +02:00
echo 'Comment=Visit a site' >> /home/$MY_USERNAME/Desktop/sites.desktop
2016-09-22 18:56:47 +02:00
echo 'Exec=mate-terminal -e /usr/local/bin/${PROJECT_NAME}-mesh-visit-site' >> /home/$MY_USERNAME/Desktop/sites.desktop
echo 'Icon=/usr/share/${PROJECT_NAME}/avatars/ipfs.jpg' >> /home/$MY_USERNAME/Desktop/sites.desktop
2016-09-04 19:50:13 +02:00
echo 'StartupNotify=false' >> /home/$MY_USERNAME/Desktop/sites.desktop
chmod +x /home/$MY_USERNAME/Desktop/sites.desktop
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/sites.desktop
2016-09-08 21:45:04 +02:00
echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/blog.desktop
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/blog.desktop
echo "Name=Blog" >> /home/$MY_USERNAME/Desktop/blog.desktop
echo 'Comment=View or create blog entries' >> /home/$MY_USERNAME/Desktop/blog.desktop
2016-09-22 18:56:47 +02:00
echo 'Exec=mate-terminal -e /usr/local/bin/${PROJECT_NAME}-mesh-blog' >> /home/$MY_USERNAME/Desktop/blog.desktop
echo 'Icon=/usr/share/${PROJECT_NAME}/avatars/blog.png' >> /home/$MY_USERNAME/Desktop/blog.desktop
2016-09-08 21:45:04 +02:00
echo 'StartupNotify=false' >> /home/$MY_USERNAME/Desktop/blog.desktop
chmod +x /home/$MY_USERNAME/Desktop/blog.desktop
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/blog.desktop
2016-09-04 19:50:13 +02:00
fi
2016-08-24 21:46:43 +02:00
if [ ! -f /home/$MY_USERNAME/runtox ]; then
2016-08-24 22:04:01 +02:00
echo 'qtox_running=\$(ps aux | grep qtox | grep data)' > /home/$MY_USERNAME/runtox
2016-08-24 21:46:43 +02:00
echo 'if [ \${#qtox_running} -eq 0 ]; then' >> /home/$MY_USERNAME/runtox
echo ' bash -c "qtox -p data"' >> /home/$MY_USERNAME/runtox
echo 'fi' >> /home/$MY_USERNAME/runtox
echo 'exit 0' >> /home/$MY_USERNAME/runtox
chmod +x /home/$MY_USERNAME/runtox
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/runtox
2016-09-09 18:24:20 +02:00
fi
2016-08-24 21:46:43 +02:00
2016-09-09 18:24:20 +02:00
if [ ! -f /home/$MY_USERNAME/Desktop/tox.desktop ]; then
2016-08-23 18:59:54 +02:00
echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/tox.desktop
2016-09-11 12:56:12 +02:00
echo 'Name=Chat' >> /home/$MY_USERNAME/Desktop/tox.desktop
2016-08-23 18:59:54 +02:00
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/tox.desktop
2016-10-01 21:39:57 +02:00
echo 'Comment=Chat, Voice and Video' >> /home/$MY_USERNAME/Desktop/tox.desktop
2016-08-31 12:28:56 +02:00
echo 'Exec=bash /home/$MY_USERNAME/runtox' >> /home/$MY_USERNAME/Desktop/tox.desktop
2016-09-11 12:56:12 +02:00
echo "Icon=/usr/share/$PROJECT_NAME/avatars/chat.png" >> /home/$MY_USERNAME/Desktop/tox.desktop
2016-08-23 18:59:54 +02:00
echo 'StartupNotify=true' >> /home/$MY_USERNAME/Desktop/tox.desktop
chmod +x /home/$MY_USERNAME/Desktop/tox.desktop
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/tox.desktop
fi
else
2016-09-12 16:16:55 +02:00
if [ -f /tmp/Users.txt ]; then
rm /tmp/Users.txt
2016-08-23 18:59:54 +02:00
rm /home/$MY_USERNAME/Desktop/Users.desktop
if [ -f /home/$MY_USERNAME/Desktop/Users.desktop ]; then
rm /home/$MY_USERNAME/Desktop/Users.desktop
fi
2016-09-04 19:50:13 +02:00
if [ -f /home/$MY_USERNAME/Desktop/sites.desktop ]; then
rm /home/$MY_USERNAME/Desktop/sites.desktop
fi
2016-09-08 21:45:04 +02:00
if [ -f /home/$MY_USERNAME/Desktop/blog.desktop ]; then
rm /home/$MY_USERNAME/Desktop/blog.desktop
fi
2016-08-23 18:59:54 +02:00
if [ -f /home/$MY_USERNAME/Desktop/tox.desktop ]; then
rm /home/$MY_USERNAME/Desktop/tox.desktop
fi
pkill qtox
fi
fi
2016-08-11 23:26:27 +02:00
EOF
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/chown $MY_USERNAME:$MY_USERNAME /usr/bin/list-tox-users
chroot "$rootdir" /bin/chmod +x /usr/bin/list-tox-users
2016-08-23 21:01:04 +02:00
echo "* * * * * $MY_USERNAME bash -c /usr/bin/list-tox-users > /dev/null" >> $rootdir/etc/crontab
2016-08-05 10:25:01 +02:00
2016-08-03 16:44:59 +02:00
if [[ $VARIANT != "usb" ]]; then
# log in automatically
chroot "$rootdir" apt-get -y install nodm xinit
echo 'NODM_ENABLED=true' > /etc/default/nodm
echo "NODM_USER=$MY_USERNAME" >> /etc/default/nodm
chroot "$rootdir" mkdir /etc/systemd/system/getty@tty1.service.d
echo '[Service]' > $rootdir/etc/systemd/system/getty@tty1.service.d/override.conf
echo 'ExecStart=' >> $rootdir/etc/systemd/system/getty@tty1.service.d/override.conf
echo 'ExecStart=-/sbin/agetty --autologin fbone --noclear %I $TERM' >> $rootdir/etc/systemd/system/getty@tty1.service.d/override.conf
echo '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx' >> $rootdir/home/$MY_USERNAME/.profile
chroot "$rootdir" systemctl set-default multi-user.target
mesh_client_startup_applications
mesh_desktop_icons
# Different desktop background for amnesic
if [[ $AMNESIC != 'no' ]]; then
MESH_DESKTOP_BACKGROUND_IMAGE=/usr/local/share/${PROJECT_NAME}_mesh_amnesic_background.png
fi
# change the desktop background
if [ $MESH_DESKTOP_BACKGROUND_IMAGE ]; then
if [ -f $MESH_DESKTOP_BACKGROUND_IMAGE ]; then
if [ -d $rootdir/usr/share/images/desktop-base ]; then
cp $MESH_DESKTOP_BACKGROUND_IMAGE $rootdir/usr/share/images/desktop-base/${PROJECT_NAME}_mesh_background.png
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/rm /usr/share/images/desktop-base/desktop-background
2016-08-03 16:44:59 +02:00
chroot "$rootdir" ln -s /usr/share/images/desktop-base/${PROJECT_NAME}_mesh_background.png /usr/share/images/desktop-base/desktop-background
fi
fi
fi
else
chroot "$rootdir" apt-get -y install lightdm
fi
# browser
chroot "$rootdir" apt-get -y install $BROWSER
2016-09-11 11:38:46 +02:00
# help
mkdir -p $rootdir/home/${MY_USERNAME}/help/images
2016-09-11 17:05:50 +02:00
cd $rootdir/root/${PROJECT_NAME}/website
./deploy.sh EN $rootdir/home/${MY_USERNAME}/help
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/chown -R ${MY_USERNAME}:${MY_USERNAME} /home/${MY_USERNAME}/help
2016-09-11 11:38:46 +02:00
2016-08-03 16:44:59 +02:00
# Tox user interface
enable_tox_repo
mesh_tox_qtox
# copy the default qtox ini file
if [ ! -d ${rootdir}/home/${MY_USERNAME}/.config/tox ]; then
mkdir ${rootdir}/home/${MY_USERNAME}/.config/tox
2016-09-22 18:56:47 +02:00
cp /usr/local/bin/${PROJECT_NAME}-config-qtox ${rootdir}/home/${MY_USERNAME}/.config/tox/qtox.ini
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/chown -R ${MY_USERNAME}:${MY_USERNAME} /home/${MY_USERNAME}/.config
2016-08-03 16:44:59 +02:00
fi
if [[ $VARIANT == "usb" ]]; then
# tor
chroot "$rootdir" apt-get -y install tor
# xmpp client
chroot "$rootdir" echo "deb ftp://ftp.gajim.org/debian unstable main" > /etc/apt/sources.list.d/gajim.list
chroot "$rootdir" apt-get update
chroot "$rootdir" apt-get -y install gajim-dev-keyring
chroot "$rootdir" apt-get -y install git python-dev python-pip gajim-nightly
chroot "$rootdir" mkdir /home/$GENERIC_IMAGE_USERNAME/.local/share/gajim/plugins -p
chroot "$rootdir" git clone https://github.com/omemo/gajim-omemo /home/$GENERIC_IMAGE_USERNAME/.local/share/gajim/plugins/gajim-omemo
chroot "$rootdir" pip install protobuf==2.6.1, python-axolotl==0.1.35
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/chown -R $GENERIC_IMAGE_USERNAME:$GENERIC_IMAGE_USERNAME /home/$GENERIC_IMAGE_USERNAME/.local
2016-08-03 16:44:59 +02:00
# IRC client
chroot "$rootdir" apt-get -y install hexchat profanity
fi
2016-06-06 18:31:23 +02:00
}
2016-05-28 13:16:00 +02:00
##############################################################################
2016-05-27 15:18:02 +02:00
2016-04-26 16:41:35 +02:00
2015-11-20 17:09:21 +01:00
# Set to true/false to control if eatmydata is used during build
use_eatmydata=true
rootdir="$1"
fmdir="$(pwd)"
image="$fmdir"/"$2"
cd "$rootdir"
echo info: building $MACHINE for $ARCHITECTURE
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
export LC_ALL=C LANGUAGE=C LANG=C
# Override libpam-tmpdir setting during build, as the directories
# are not created yet.
export TMP=/tmp/ TMPDIR=/tmp/
2016-07-12 16:11:45 +02:00
if [ ! $MY_USERNAME ]; then
2016-08-03 16:44:59 +02:00
echo $'No username was specified'
exit 52825
2016-07-12 16:11:45 +02:00
fi
2015-11-20 22:43:03 +01:00
username=$MY_USERNAME
2015-11-27 16:29:43 +01:00
echo $"warning: creating initial user $username with well known password!"
2015-11-20 22:43:03 +01:00
password=$MY_PASSWORD
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /usr/bin/env -i \
HOME=/root \
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
echo "export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:" >> $rootdir/root/.bashrc
2015-11-22 14:07:48 +01:00
chroot "$rootdir" adduser --gecos $username --disabled-password $username
2016-09-23 00:03:02 +02:00
echo $username:$password | chroot "$rootdir" /usr/sbin/chpasswd
2015-11-22 14:07:48 +01:00
chroot "$rootdir" adduser $username sudo
2015-11-20 17:09:21 +01:00
2016-09-27 23:45:59 +02:00
case "$MACHINE" in
qemu)
# hide irrelevant console keyboard messages.
echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \
>> /etc/init.d/rc.local
;;
esac
2015-11-20 17:09:21 +01:00
2016-08-13 11:43:23 +02:00
if [ ! $DEBIAN_REPO ]; then
DEBIAN_REPO='ftp.de.debian.org'
fi
if [ ! $DEBIAN_VERSION ]; then
DEBIAN_VERSION='jessie'
fi
2015-11-20 17:09:21 +01:00
set_apt_sources $BUILD_MIRROR
2016-01-28 11:11:28 +01:00
chroot "$rootdir" apt-get clean
2016-09-23 00:03:02 +02:00
chroot "$rootdir" /bin/rm -rf /var/lib/apt/lists/*
2016-01-28 11:11:28 +01:00
chroot "$rootdir" apt-get clean
2016-08-13 11:43:23 +02:00
set_apt_sources $MIRROR
2016-08-13 11:12:23 +02:00
configure_backports
configure_contrib_repo
2015-11-22 14:07:48 +01:00
chroot "$rootdir" apt-get update
2016-09-27 23:45:59 +02:00
chroot "$rootdir" apt-get install -y apt-utils
2015-11-20 17:09:21 +01:00
cat > $rootdir/usr/sbin/policy-rc.d <<EOF
2016-04-28 15:36:45 +02:00
#!/bin/sh
exit 101
EOF
2015-11-20 17:09:21 +01:00
chmod a+rx $rootdir/usr/sbin/policy-rc.d
if $use_eatmydata ; then
2016-08-03 16:44:59 +02:00
enable_eatmydata_override
2015-11-20 17:09:21 +01:00
fi
if [ -n "$CUSTOM_SETUP" ]; then
2016-08-03 16:44:59 +02:00
cp "$CUSTOM_SETUP" "$rootdir"/tmp
chroot "$rootdir" apt-get install -y gdebi-core
chroot "$rootdir" gdebi -n /tmp/"$(basename $CUSTOM_SETUP)"
2015-11-20 17:09:21 +01:00
fi
2016-08-11 14:56:25 +02:00
if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" && $VARIANT != "mesh" ]]; then
chroot "$rootdir" apt-get install -y openssh-server
fi
2016-10-14 11:34:05 +02:00
chroot "$rootdir" apt-get install -y sudo git dialog build-essential
2015-11-25 10:51:35 +01:00
chroot "$rootdir" apt-get install -y avahi-daemon avahi-utils avahi-discover avahi-autoipd
2015-11-26 23:08:44 +01:00
chroot "$rootdir" apt-get install -y iptables dnsutils net-tools network-manager iputils-ping
2015-11-29 16:00:10 +01:00
chroot "$rootdir" apt-get install -y libnss-mdns libnss-myhostname libnss-gw-name nano man ntp
2016-09-27 23:45:59 +02:00
chroot "$rootdir" apt-get install -y locales locales-all debconf wireless-tools wpasupplicant usbutils
2016-09-23 16:21:15 +02:00
if [[ $ARCHITECTURE == 'qemu'* || $ARCHITECTURE == 'i386' || $ARCHITECTURE == 'i686' || $ARCHITECTURE == 'amd64' || $ARCHITECTURE == 'x86_64' ]]; then
2016-09-27 23:45:59 +02:00
chroot "$rootdir" apt-get install -y cryptsetup zsh pinentry-curses iotop bc
2016-10-06 21:47:23 +02:00
chroot "$rootdir" apt-get install -y grub2 hostapd
2016-09-23 12:51:30 +02:00
fi
2015-11-25 10:51:35 +01:00
2015-11-29 17:20:20 +01:00
sed -i "s|#host-name=.*|host-name=${PROJECT_NAME}|g" $rootdir/etc/avahi/avahi-daemon.conf
2016-05-30 22:05:03 +02:00
sed -i "s|host-name=.*|host-name=${PROJECT_NAME}|g" $rootdir/etc/avahi/avahi-daemon.conf
2015-11-29 17:20:20 +01:00
2015-11-22 14:07:48 +01:00
chroot "$rootdir" /bin/bash -x <<EOF
2016-04-28 15:36:45 +02:00
git clone $PROJECT_REPO /root/$PROJECT_NAME
cd /root/$PROJECT_NAME
2016-07-16 22:31:07 +02:00
git checkout origin/stockholm -b stockholm
2016-04-28 15:36:45 +02:00
make install
EOF
2015-11-20 17:09:21 +01:00
2015-12-01 09:32:30 +01:00
chroot "$rootdir" ${PROJECT_NAME}-image-hardware-setup 2>&1 | \
2016-08-03 16:44:59 +02:00
tee $rootdir/var/log/${PROJECT_NAME}-image-hardware-setup.log
2015-11-20 17:09:21 +01:00
rm $rootdir/usr/sbin/policy-rc.d
2015-11-29 12:34:57 +01:00
# Set up HRNG for systems known to have one
# Otherwise install haveged
2015-11-22 14:07:48 +01:00
if [[ "$MACHINE" != "beaglebone" ]]; then
2016-08-03 16:44:59 +02:00
chroot $rootdir apt-get -y install haveged
2015-11-22 14:07:48 +01:00
else
2016-08-03 16:44:59 +02:00
chroot $rootdir apt-get -y install rng-tools
sed -i 's|#HRNGDEVICE=/dev/hwrng|HRNGDEVICE=/dev/hwrng|g' $rootdir/etc/default/rng-tools
2015-11-22 14:07:48 +01:00
fi
2015-11-20 17:09:21 +01:00
# copy u-boot to beginning of image
case "$MACHINE" in
2016-08-03 16:44:59 +02:00
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
;;
2015-11-20 17:09:21 +01:00
esac
if $use_eatmydata ; then
2016-08-03 16:44:59 +02:00
disable_eatmydata_override
2015-11-20 17:09:21 +01:00
fi
2015-11-21 15:33:39 +01:00
configure_ssh
2015-11-21 14:12:31 +01:00
configure_networking
2015-11-22 14:43:23 +01:00
admin_user_sudo
2015-11-23 11:33:45 +01:00
create_generic_image
2015-12-22 12:07:00 +01:00
atheros_wifi
2015-12-22 12:43:07 +01:00
continue_installation
2016-01-11 12:27:08 +01:00
initialise_mesh
2016-04-26 16:41:35 +02:00
configure_wifi
2016-06-06 18:31:23 +02:00
configure_user_interface
2015-11-21 12:56:40 +01:00
2016-08-23 15:52:44 +02:00
# remove downloaded packages
chroot $rootdir apt-get clean
2015-11-20 17:09:21 +01:00
cd /
2015-11-27 16:29:43 +01:00
echo $"info: killing leftover processes in chroot"
2015-11-20 17:09:21 +01:00
fuser -mvk $rootdir/. || true
2016-04-28 15:05:37 +02:00
exit 0