blob: 0ff965eabd5e572eb209f68eae1ae8d19859d167 [file] [log] [blame]
#!/bin/bash
#helper functions
announcement(){
echo "$(tput setaf 3)"
echo "================================================="
for arg in "$@"
do
echo "$arg"
done
echo "================================================="
echo "$(tput sgr0)"
}
alert(){
echo "$(tput setaf 1)"
echo "================================================="
for arg in "$@"
do
echo "$arg"
done
echo "================================================="
echo "$(tput sgr0)"
}
echo_red() {
echo "$(tput setaf 1) $1 $(tput sgr0)"
}
echo_green() {
echo "$(tput setaf 2) $1 $(tput sgr0)"
}
fail () {
echo -e "Error encountered during install"
echo -n "Cleaning up..."
umount sdcard/proc
umount sdcard/sys
umount sdcard/dev/pts
fuser -av sdcard
fuser -kv sdcard
umount sdcard/boot
fuser -k sdcard
umount sdcard
kpartx -dv $image_name
rm -rf sdcard
rm $image_name
echo "[done]"
exit 1
}
# Apache iota Raspberry Pi Img Builder
# BEGIN Configuration
image_name=iota_installer_rpi_v0_1a.img
image_size=1
release=jessie
http=http://mirrordirector.raspbian.org/raspbian
scala_url=https://downloads.typesafe.com/scala/2.11.6/scala-2.11.6.tgz
spark_url=http://apache.mirror.anlx.net/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgz
spark_redis_url=https://github.com/RedisLabs/spark-redis.git
libsodium_url=https://download.libsodium.org/libsodium/releases/libsodium-1.0.3.tar.gz
zeromq_url=http://download.zeromq.org/zeromq-4.1.3.tar.gz
mqtt_key=http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
mqtt_url=http://repo.mosquitto.org/debian/mosquitto-$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release).list
bootloader=kernel
root_file_system=ext4
mkfs_ext4_options="^has_journal -E stride=0,stripe-width=128 -b 4096"
keyboard_layout=us
timeserver=time.nist.gov
# stuff to have cdebootstrap to install or exclude, just use the ',' format
include=dphys-swapfile
exclude=
not_installed="$(tput setaf 1)not installed.$(tput sgr0)"
installed="$(tput setaf 2)installed.$(tput sgr0)"
# use 'misc_stuff' to add routine packages with apt-get after cdebootstrap install complete
misc_stuff="libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc dbus fake-hwclock psmisc ssh ntp vim"
# END Configurization
# Hardware check
RPI1_HARDWARE="BCM2708"
RPI2_HARDWARE="BCM2709"
rpi_hardware=$(grep Hardware /proc/cpuinfo | cut -d " " -f 2)
rpi_hardware_version="UNKNOWN !!"
if [ "$rpi_hardware" = "$RPI1_HARDWARE" ] ; then
rpi_version="rpi"
elif [ "$rpi_hardware" = "$RPI2_HARDWARE" ] ; then
rpi_version="rpi2"
else
alert " Alert: No Raspberry Pi hardware detected!!" \
" Value of rpi_hardware variable: '${rpi_hardware}'"
exit 1
fi
echo ""
announcement "Raspberry Pi Iota Installer" \
"Revision 0.0.1a" \
"Built on May 1, 2016" \
"Running on Raspberry Pi version ${rpi_hardware}" \
"http://incubator.apache.org/projects/iota.html"
# Check to see if installer is being run as root
start_time=$(date)
echo -en "hecking for root to run the installer ... "
if [ ${EUID} -ne 0 ]; then
echo_red "[Failed]"
alert " Alert: iota installer must run as root!!" \
" Try 'sudo ./iota_rpi_installer_0.1.sh' as a user"
exit 1
else
echo_green "[Done]"
fi
# Check for base programs that are needed
announcement "Checking for necessary base programs to be installed..."
APS=""
echo -n "Checking for fuser ... "
if [ `which fuser` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="psmisc "
fi
echo -n "Checking for ioctl ... "
if [ -f /usr/include/linux/ioctl.h ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="libc6-dev "
fi
echo -n "Checking for kpartx ... "
if [ `which kpartx` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="kpartx "
fi
echo -n "Checking for partprobe ... "
if [ `which partprobe` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="parted "
fi
echo -n "Checking for dosfstools ... "
if [ `which fsck.vfat` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="dosfstools "
fi
echo -n "Checking for cdebootstrap ... "
if [ `which cdebootstrap` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="cdebootstrap "
fi
echo -n "Checking for curl ... "
if [ `which curl` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="curl "
fi
echo -n "Checking for git ... "
if [ `which git` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="git "
fi
echo -n "Checking for vim ... "
if [ `which vim` ]; then
echo_green "installed"
else
echo_red "not installed"
APS+="vim "
fi
if [ "$APS" != "" ]; then
announcement "iota installer needs the following base applications installed: " "$APS"
echo -n "Would you like me to get $APS for you ?? [Y/n]: "
read resp
if [ "$resp" = "" ] || [ "$resp" = "y" ] || [ "$resp" = "yes" ]; then
apt-get update
apt-get -y install $APS
announcement "All base applications are now installed."
else
alert "Necessary Applications not installed" \
"Exiting .. :(~"
exit 1
fi
else
announcement "No further base applications needed .. :)~"
fi
# install questions
announcement "Starting the network configuration ..."
echo -n "Please enter the hostname: [iota] "
read resp
if [ "$resp" = "" ]; then
hostname=iota
else
hostname="$resp"
fi
echo -n "Please enter the domain name: [] "
read resp
if [ "$resp" = "" ]; then
domain_name=
else
domain_name="$resp"
fi
echo -n "Please enter the root password: [root]"
read resp
if [ "$resp" = "" ]; then
root_password=root
else
root_password="$resp"
fi
echo -n "Please enter the wifi name: [Enter if you don't want to configure wifi now]"
read resp_wifi_name
if [ "$resp_wifi_name" != "" ]; then
echo -n "Please enter the wifi password: "
read resp_wifi_passwd
fi
echo -n "Enabe DHCP for networking [Y/n]? : "
read resp
if [ "$resp" = "" ] || [ "$resp" = "y" ] || [ "$resp" = "yes" ]; then
dhcp="yes"
else
dhcp="no"
echo -n "Please enter IP address :"
read resp
address="$resp"
echo -n "Please enter IP netmask :"
read resp
netmask="$resp"
echo -n "Please enter IP broadcast :"
read resp
broadcast="$resp"
echo -n "Please enter IP gateway :"
read resp
gateway="$resp"
fi
# Other Installs (Spark, Redis, SBT, Scala, ZeroMQ, MQTT
echo "====================================================="
echo -n "Would you like me to get Redis for you ?? [Y/n]: "
read resp_redis
echo -n "Would you like me to get Scala for you ?? [Y/n]: "
read resp_scala
echo -n "Would you like me to get Spark for you ?? [Y/n]: "
read resp_spark
echo -n "Would you like me to get ZeroMQ for you ?? [Y/n]: "
read resp_zeromq
echo -n "Would you like me to get MQTT for you ?? [Y/n]: "
read resp_mqtt
echo -n "Would you like me to get Cockroachdb for you ?? [Y/n]: "
read resp_cockroach
# Create image file
announcement "Creating a zero-filled file $image_name $image_size mega blocks big"
dd if=/dev/zero of=$image_name bs=1 count="$image_size" iflag=fullblock seek=1G
thingy=$image_name
# Create partitions
announcement "Creating partitions"
fdisk_version=$(fdisk -v | grep 2 | cut -d "." -f2)
echo -n "fdisk_version "; echo $fdisk_version
if [ "$fdisk_version" -lt 25 ]; then
echo "old"
fdisk $thingy <<EOF
o # clear the in memory partition table
n # new partition
+128M # 128 MB boot parttion
a # make a partition bootable
1 # partition number 1
t
6
n
w # write the partition table
EOF
else
echo "new"
fdisk $thingy <<EOF
o
n
+128M
a
t
6
n
w
EOF
fi
announcement "Setting up kpartx drive mapper for $image_name" \
"and define loopback devices for boot & root"
loop_device=$(kpartx -av $image_name | grep p1 | cut -d" " -f8 | awk '{print$1}')
echo -n "Loop device is "
echo $loop_device
echo -e "\n\nPartprobing $thingy\n"
partprobe $loop_device
echo ""
bootpart=$(echo $loop_device | grep dev | cut -d"/" -f3 | awk '{print$1}')p1
bootpart=/dev/mapper/$bootpart
rootpart=$(echo $loop_device | grep dev | cut -d"/" -f3 | awk '{print$1}')p2
rootpart=/dev/mapper/$rootpart
echo -n "Boot partition is "
echo $bootpart
echo -n "Root partition is "
echo $rootpart
announcement "Formating partitions"
mkdosfs -n BOOT $bootpart
echo ""
if [ "$root_file_system" == "ext4" ]; then
echo "mkfs.ext4 -O $mkfs_ext4_options -L Raspbian $rootpart"
echo "y" | mkfs.ext4 -O $mkfs_ext4_options -L Raspbian $rootpart && sync
echo " "
fi
echo ""
fdisk -l $thingy
# cdebootstrap is a tool which will install a Debian base system into a subdirectory of another
announcement "Setting up for cdebootstrap"
echo -e "mkdir sdcard, mount sdcard as /, cdebootstraping $rootpart, mount /boot as $bootpart and mount /proc,/sys & /dev/pts\n\n"
mkdir -v sdcard
echo -n "Mounting "
mount -v -t $root_file_system -o sync $rootpart sdcard
echo " "
include="--include=kbd,locales,keyboard-configuration,console-setup,$include"
exclude="--exclude=$exclude"
echo -n "cdebootstrap's line "
echo "cdebootstrap --arch armhf ${release} sdcard $http ${include} $exclude"
echo " "
cdebootstrap --arch armhf ${release} sdcard $http ${include} $exclude --allow-unauthenticated && sync || fail
echo -e "\nMount new chroot system\n"
mount -v -t vfat -o sync $bootpart sdcard/boot
mount -v proc sdcard/proc -t proc
mount -v sysfs sdcard/sys -t sysfs
mount -v --bind /dev/pts sdcard/dev/pts
# Adjust a few things
echo -e "\n\nCopy, adjust and reconfigure\n"
echo "Setting up the root password... "
echo root:$root_password | chroot sdcard chpasswd
echo ""
echo "Getting gpg.key's"; echo ""
chroot sdcard wget http://archive.raspberrypi.org/debian/raspberrypi.gpg.key
chroot sdcard apt-key add raspberrypi.gpg.key
rm -v sdcard/raspberrypi.gpg.key; echo ""
chroot sdcard wget http://mirrordirector.raspbian.org/raspbian.public.key
chroot sdcard apt-key add raspbian.public.key
rm -v sdcard/raspbian.public.key; echo ""
chroot sdcard apt-key list
echo -e "\nAdjusting /etc/apt/sources.list for Release $release Bootloader $bootloader rPi_version $rpi_version debian_version $debian_version\n"
if [ "$bootloader" == "kernel" ]; then
rasp_stuff+=" raspberrypi-bootloader"
sed -i sdcard/etc/apt/sources.list -e "s/main/main contrib non-free firmware/"
echo "deb http://archive.raspberrypi.org/debian/ jessie main" >> sdcard/etc/apt/sources.list
else
rasp_stuff+=" raspberrypi-bootloader-nokernel linux-image-$rpi_version-rpfv hardlink oracle-java8-jdk"
echo -n "Creating preference for libraspberrypi-bin... "
echo "# This sets the preference for the kernel version lower so the no-kernel are used" > sdcard/etc/apt/preferences.d/02VideoCore.pref
echo "Package: libraspberrypi-bin libraspberrypi0 libraspberrypi-dev libraspberrypi-doc" >> sdcard/etc/apt/preferences.d/02VideoCore.pref
echo "Pin: release o=Raspbian,n=$release" >> sdcard/etc/apt/preferences.d/02VideoCore.pref
echo "Pin-Priority: 700" >> sdcard/etc/apt/preferences.d/02VideoCore.pref
if [ "$debian_version" == "ftp" ] && [ "$rpi_version" == "rpi2" ]; then
sed -i sdcard/etc/apt/sources.list -e "s/main/main contrib non-free/"
echo "deb http://mirrordirector.raspbian.org/raspbian $release main firmware" >> sdcard/etc/apt/sources.list
sed -i sdcard/etc/apt/preferences.d/02VideoCore.pref -e "s/700/49/"
else
sed -i sdcard/etc/apt/sources.list -e "s/main/main contrib non-free firmware/"
echo "deb http://archive.raspberrypi.org/debian wheezy main" >> sdcard/etc/apt/sources.list
fi
fi
echo "Contents of /etc/apt/sources.list"
cat sdcard/etc/apt/sources.list
echo "Contents of /etc/apt/preferences.d/"
cat sdcard/etc/apt/preferences.d/*; echo ""
# Time Management
echo "Changing timezone too..."
if [ "$timezone" == "" ]; then
cp -v /etc/timezone sdcard/etc/timezone
else
echo "$timezone" > sdcard/etc/timezone
fi
cat sdcard/etc/timezone; echo ""
echo "Adjusting locales too..."
if [ "$locales" == "" ]; then
cp -v /etc/locale.gen sdcard/etc/locale.gen
else
sed -i "s/^# \($locales .*\)/\1/" sdcard/etc/locale.gen
fi
grep -v '^#' sdcard/etc/locale.gen; echo ""
echo "Adjusting default local too..."
if [ "$default_locale" == "" ]; then
default_locale=$(fgrep "=" /etc/default/locale | cut -f 2 -d '=')
fi
echo $default_locale; echo ""
# This will record the time to get to this point
PRE_NETWORK_DURATION=$(date +%s)
date_set=false
if [ "$date_set" = "false" ] ; then
# set time with ntpdate
ntpdate-debian -b &>/dev/null
if [ $? -eq 0 ] ; then
echo -n "Time set using ntpdate to... "
date
date_set=true
else
echo "Failed to set time using ntpdate!"
fi
if [ "$date_set" = "false" ] ; then
# failed to set time with ntpdate, fall back to rdate
# time server addresses taken from http://tf.nist.gov/tf-cgi/servers.cgi
timeservers=$timeserver
timeservers="$timeservers time.nist.gov nist1.symmetricom.com"
timeservers="$timeservers nist-time-server.eoni.com utcnist.colorado.edu"
timeservers="$timeservers nist1-pa.ustiming.org nist.expertsmi.com"
timeservers="$timeservers nist1-macon.macon.ga.us wolfnisttime.com"
timeservers="$timeservers nist.time.nosc.us nist.netservicesgroup.com"
timeservers="$timeservers nisttime.carsoncity.k12.mi.us nist1-lnk.binary.net"
timeservers="$timeservers ntp-nist.ldsbc.edu utcnist2.colorado.edu"
timeservers="$timeservers nist1-ny2.ustiming.org wwv.nist.gov"
for ts in $timeservers
do
rdate $ts &>/dev/null
if [ $? -eq 0 ]; then
echo -n "Time set using timeserver '$ts' to... "
date
date_set=true
break
else
echo "Failed to set time using timeserver '$ts'."
fi
done
fi
fi
if [ "$date_set" = "false" ] ; then
echo "FAILED to set the date, so things are likely to fail now ..."
echo "Make sure that rdate port 37 is not blocked by your firewall."
fi
# Record the time now that the time is set to a correct value
STARTTIME=$(date +%s)
# And substract the PRE_NETWORK_DURATION from STARTTIME to get the
# REAL starting time.
REAL_STARTTIME=$(($STARTTIME - $PRE_NETWORK_DURATION))
echo ""
echo "Installation started at $(date --date="@$REAL_STARTTIME" --utc)."
echo ""
echo "Setting up keyboard"
if [ "$number_of_keys" == "" ]; then
cp -v /etc/default/keyboard sdcard/etc/default/keyboard
else
# setting up keyboard package
echo "Adjusting keyboard to $number_of_keys $keyboard_layout... "
# adjust variables
xkbmodel=XKBMODEL='"'$number_of_keys'"'
xkblayout=XKBLAYOUT='"'$keyboard_layout'"'
xkbvariant=XKBVARIANT='"'$keyboard_variant'"'
xkboptions=XKBOPTIONS='"'$keyboard_options'"'
backspace=BACKSPACE='"'$backspace'"'
# make keyboard file
cat <<EOF > sdcard/etc/default/keyboard
# KEYBOARD CONFIGURATION FILE
$xkbmodel
$xkblayout
$xkbvariant
$xkboptions
$backspace
EOF
fi
echo ""; cat sdcard/etc/default/keyboard; echo ""
# end keyboard
echo "Creating cmdline.txt";echo ""
echo "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait" > sdcard/boot/cmdline.txt
echo "Adding Raspberry Pi tweaks to sysctl.conf"; echo ""
echo "" >> sdcard/etc/sysctl.conf
echo "# http://www.raspberrypi.org/forums/viewtopic.php?p=104096#p104096" >> sdcard/etc/sysctl.conf
echo "# rpi tweaks" >> sdcard/etc/sysctl.conf
echo "vm.swappiness = 1" >> sdcard/etc/sysctl.conf
echo "vm.min_free_kbytes = 8192" >> sdcard/etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" >> sdcard/etc/sysctl.conf
echo "vm.dirty_writeback_centisecs = 1500" >> sdcard/etc/sysctl.conf
echo "vm.dirty_ratio = 20" >> sdcard/etc/sysctl.conf
echo "vm.dirty_background_ratio = 10" >> sdcard/etc/sysctl.conf
echo "Adjust hosts and hostname"; echo ""
echo $hostname > sdcard/etc/hostname
echo "127.0.1.1 $domain_name $hostname" >> sdcard/etc/hosts
echo "CONF_SWAPSIZE=100" > sdcard/etc/dphys-swapfile
sed -i sdcard/etc/default/rcS -e "s/^#FSCKFIX=no/FSCKFIX=yes/"
sed -i sdcard/lib/udev/rules.d/75-persistent-net-generator.rules -e 's/KERNEL\!="eth\*|ath\*|wlan\*\[0-9\]/KERNEL\!="ath\*/'
chroot sdcard dpkg-divert --add --local /lib/udev/rules.d/75-persistent-net-generator.rules
# Setup fstab
echo -e "\nSetting up fstab\n"
cat <<EOF > sdcard/etc/fstab
#<file system> <dir> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
EOF
cat sdcard/etc/fstab && sync; echo " "
chroot sdcard dpkg-reconfigure -f noninteractive locales
echo " "
chroot sdcard locale-gen LANG="$default_locale"
echo " "
chroot sdcard dpkg-reconfigure -f noninteractive tzdata
echo " "
chroot sdcard dpkg-reconfigure -f noninteractive keyboard-configuration
echo " "
chroot sdcard dpkg-reconfigure -f noninteractive console-setup
echo "Done Coping, adjusting and reconfiguring"
echo -e "Setting up networking\n\n"
cat <<EOF > sdcard/etc/network/interfaces
# 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
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
EOF
if [ "$dhcp" == "yes" ]; then
echo "iface eth0 inet dhcp" >> sdcard/etc/network/interfaces
else
echo "iface eth0 inet static" >> sdcard/etc/network/interfaces
echo " address $address" >> sdcard/etc/network/interfaces
echo " netmask $netmask" >> sdcard/etc/network/interfaces
echo " broadcast $broadcast" >> sdcard/etc/network/interfaces
echo " gateway $gateway" >> sdcard/etc/network/interfaces
fi
cat <<EOF > sdcard/etc/modprobe.d/ipv6.conf
# Don't load ipv6 by default
alias net-pf-10 off
#alias ipv6 off
EOF
echo "hostname "
cat sdcard/etc/hostname
echo " "
echo "resolv.conf "
cat sdcard/etc/resolv.conf
echo " "
echo "hosts"
cat sdcard/etc/hosts
echo " "
echo "network/interfaces"
cat sdcard/etc/network/interfaces
echo " "
echo "modprobe.d/ipv6.conf"
cat sdcard/etc/modprobe.d/ipv6.conf
echo " "
# Setup wifi
if [ "$resp_wifi_name" != "" ]; then
echo -e "\nSetting up wifi\n"
cat <<EOF >> sdcard/etc/network/interfaces
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
EOF
cat <<EOF >> sdcard/etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="$resp_wifi_name"
psk="$resp_wifi_passwd"
}
EOF
fi
# end Networking
# Update and install raspberrypi-bootloader
echo -e "\n\nUpdate install and install raspberrypi-bootloader and other stuff\n"
echo -e "apt-get update\n\n"
chroot sdcard apt-get update || fail
echo -e "\n\napt-get -y upgrade\n\n"
chroot sdcard apt-get -y upgrade || fail
echo -e "\n\napt-get -y dist-upgrade\n\n"
chroot sdcard apt-get -y dist-upgrade || fail
chroot sdcard apt-get clean
echo -e "\n\napt-get -y install $rasp_stuff\n\n"
chroot sdcard apt-get -y install $rasp_stuff || fail
chroot sdcard apt-get clean
if [ "$misc_stuff" != "" ]; then
echo -e "\n\nInstalling Misc_stuff apt-get -y install $misc_stuff\n\n"
chroot sdcard apt-get -y install $misc_stuff || fail
chroot sdcard apt-get clean
fi
chroot sdcard apt-get autoremove -y
echo -e "\n\nOk, Done with raspberrypi-bootloader and other stuff\n\n"
echo "====================================================="
echo ""
echo "====================================================="
if [ "$resp_redis" = "" ] || [ "$resp_redis" = "y" ] || [ "$resp_redis" = "yes" ]; then
echo -n "Installing Redis...."
resp_redis="y"
chroot sdcard apt-get -y install redis-server python-redis
echo "[done]"
else
echo "Redis not installed"
echo "====================================================="
echo ""
fi
echo "====================================================="
if [ "$resp_scala" = "" ] || [ "$resp_scala" = "y" ] || [ "$resp_scala" = "yes" ]; then
echo "Installing Scala..."
resp_scala="y"
wget -P sdcard $scala_url
mkdir -p sdcard/usr/lib/scala
chroot sdcard tar -xzf scala-2.11.6.tgz -C /usr/lib/scala
rm sdcard/scala-2.11.6.tgz*
chroot sdcard ln -sf /usr/lib/scala/scala-2.11.6/bin/scala /bin/scala
chroot sdcard ln -sf /usr/lib/scala/scala-2.11.6/bin/scalac /bin/scalac
echo "[done]"
else
echo "Scala not installed"
echo "====================================================="
echo ""
fi
echo "====================================================="
if [ "$resp_spark" = "" ] || [ "$resp_spark" = "y" ] || [ "$resp_spark" = "yes" ]; then
echo -n "Installing Spark..."
resp_spark="y"
chroot sdcard apt-get -y install git &>/dev/null
wget -P sdcard $spark_url
chroot sdcard tar xzf spark-1.6.1-bin-hadoop2.6.tgz -C /opt
rm sdcard/spark-1.6.1-bin-hadoop2.6.tgz*
echo "[done]"
else
echo "Spark not installed"
echo "====================================================="
echo ""
fi
echo "====================================================="
if [ "$resp_spark" = "y" ] && [ "$resp_redis" = "y" ] && [ "$resp_scala" = "y" ]; then
echo -n "Installing maven..."
chroot sdcard apt-get -y install maven
echo "[done]"
echo -n "Installing Spark-redis-connector..."
chroot sdcard << EOF
git clone $spark_redis_url
cd spark-redis
mvn clean package -DskipTests
EOF
echo "[done]"
else
echo "Spark-redis-connector not installed"
echo "====================================================="
echo ""
fi
echo "====================================================="
if [ "$resp_zeromq" = "" ] || [ "$resp_zeromq" = "y" ] || [ "$resp_zeromq" = "yes" ]; then
echo -n "Installing ZeroMQ pre-requisites..."
chroot sdcard apt-get -y install libtool pkg-config build-essential autoconf automake &>/dev/null
wget -P sdcard $libsodium_url
chroot sdcard tar xzf libsodium-1.0.3.tar.gz
rm sdcard/libsodium-1.0.3.tar.gz*
chroot sdcard << EOF
cd libsodium-1.0.3/
./configure
make
make install
EOF
rm -r sdcard/libsodium-1.0.3/
echo "[done]"
echo -n "Installing ZeroMQ..."
wget -P sdcard $zeromq_url
chroot sdcard << EOF
tar -zxf zeromq-4.1.3.tar.gz &>/dev/null
cd zeromq-4.1.3/
./configure
make
make install
ldconfig
cd ..
rm -r zeromq-4.1.3/
rm zeromq-4.1.3.tar.gz
EOF
echo "[done]"
else
echo "ZeroMQ not installed"
echo "====================================================="
echo ""
fi
echo "====================================================="
if [ "$resp_mqtt" = "" ] || [ "$resp_mqtt" = "y" ] || [ "$resp_mqtt" = "yes" ];
then
echo -n "Installing MQTT..."
chroot sdcard << EOF
curl -O $mqtt_key
apt-key add mosquitto-repo.gpg.key
rm mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
curl -O $mqtt_url
apt-get update
apt-get -y install mosquitto mosquitto-clients python-mosquitto
EOF
echo "[done]"
else
echo "MQTT not installed"
echo "====================================================="
echo ""
fi
echo "====================================================="
if [ "$resp_cockroach" = "" ] || [ "$resp_cockroach" = "y" ] || [ "$resp_cockroach" = "yes" ];
then
echo -n "Installing cockroachdb..."
sudo su
cat <<EOF >> sdcard/root/.bashrc
export PATH=\$PATH:/usr/local/go/bin
export GOPATH=\$HOME/work
EOF
exit
wget -P sdcard https://storage.googleapis.com/golang/go1.6.2.linux-armv6l.tar.gz
chroot sdcard << EOF
tar xzf go1.6.2.linux-armv6l.tar.gz -C /usr/local
rm go1.6.2.linux-armv6l.tar.gz
go get -d github.com/cockroachdb/cockroach
cd \$GOPATH/src/github.com/cockroachdb/cockroach
git checkout beta-20160505
make build
EOF
echo "[done]"
else
echo "cockroachdb not installed"
echo "====================================================="
echo ""
fi
# wrap up
sync
du -ch sdcard | grep total
echo "====================================================="
echo " "
echo "Unmounting mount points"
fuser -av sdcard
fuser -kv sdcard
umount sdcard/proc
umount sdcard/sys
umount sdcard/dev/pts
umount -v sdcard/boot
umount -v sdcard
kpartx -dv $image_name
fuser -av sdcard
rm -rf sdcard
echo " "
echo $start_time
echo $(date)
echo " "
echo -e "\n\niota install finished\n"
echo "Move .img file to sd-card"
echo "====================================================="
exit 0