mirror of
https://github.com/RasppleII/a2cloud.git
synced 2024-12-02 21:49:20 +00:00
234 lines
9.1 KiB
Plaintext
234 lines
9.1 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
# raspbian-update
|
||
|
# updates Raspbian to latest version, including NOOBS if installed
|
||
|
|
||
|
[[ -f /usr/bin/raspi-config ]] && isRpi=1 || isRpi=
|
||
|
|
||
|
if [[ ! $isRpi ]]; then
|
||
|
echo "This ain't a Raspberry Pi."
|
||
|
[[ $0 == "-bash" ]] && return 1 || exit 1
|
||
|
fi
|
||
|
|
||
|
skipRepoUpdate=
|
||
|
autoYes=
|
||
|
updateA2Cloud=
|
||
|
updateA2Server=
|
||
|
while [[ $1 ]]; do
|
||
|
if [[ $1 == "-r" ]]; then
|
||
|
shift
|
||
|
skipRepoUpdate="-r"
|
||
|
elif [[ $1 == "-y" ]]; then
|
||
|
shift
|
||
|
autoYes="-y"
|
||
|
elif [[ $1 == "-n" ]]; then
|
||
|
shift
|
||
|
noobsOnly="-n"
|
||
|
elif [[ $1 == "a2cloud" ]]; then
|
||
|
shift
|
||
|
updateA2Cloud=1
|
||
|
elif [[ $1 == "a2server" ]]; then
|
||
|
shift
|
||
|
updateA2Server=1
|
||
|
elif [[ $1 ]]; then
|
||
|
echo "options:"
|
||
|
echo "-y: auto-answer yes to all prompts and don't prompt for restart"
|
||
|
echo "-r: don't update package repositories"
|
||
|
echo "-n: update NOOBS only; don't update Raspbian"
|
||
|
echo "a2cloud : update A2CLOUD when complete"
|
||
|
echo "a2server: update A2SERVER when complete"
|
||
|
[[ $0 == "-bash" ]] && return 1 || exit 1
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
noobs=
|
||
|
readarray -t partitions < <(sudo fdisk -l | grep '^/dev')
|
||
|
if [[ \
|
||
|
${partitions[0]:0:14} == "/dev/mmcblk0p1" && ${partitions[0]:57:2} == " e" &&
|
||
|
${partitions[1]:0:14} == "/dev/mmcblk0p2" && ${partitions[1]:57:2} == "85" &&
|
||
|
${partitions[2]:0:14} == "/dev/mmcblk0p3" && ${partitions[2]:57:2} == "83" &&
|
||
|
${partitions[3]:0:14} == "/dev/mmcblk0p5" && ${partitions[3]:57:2} == " c" &&
|
||
|
${partitions[4]:0:14} == "/dev/mmcblk0p6" && ${partitions[4]:57:2} == "83" ]]; then
|
||
|
noobs=" and the NOOBS install manager"
|
||
|
fi
|
||
|
|
||
|
if [[ ! $autoYes ]]; then
|
||
|
echo
|
||
|
echo "You are about to update your SD card to the latest version of the"
|
||
|
echo "Raspbian operating system${noobs}."
|
||
|
echo
|
||
|
echo "This may take an hour or more, and will require restarting when complete."
|
||
|
echo "You might want a backup before continuing in case it doesn't go as planned."
|
||
|
echo
|
||
|
echo -n "Update Raspbian? "
|
||
|
read
|
||
|
if [[ ${REPLY:0:1} != "Y" && ${REPLY:0:1} != "y" ]]; then
|
||
|
[[ $0 == "-bash" ]] && return 2 || exit 2
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
origDir="$PWD"
|
||
|
cd /tmp
|
||
|
|
||
|
if [[ ! $skipRepoUpdate ]]; then
|
||
|
echo "Updating package repositories..."
|
||
|
sudo apt-get -y update > /dev/null
|
||
|
else
|
||
|
echo "Not updating package repositories..."
|
||
|
echo
|
||
|
fi
|
||
|
|
||
|
if [[ ! $noobsOnly ]]; then
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
freeSpace=$(df / | tail -1 | awk '{ print $4 }')
|
||
|
if (( $freeSpace < 400000 )); then
|
||
|
if dpkg -l | grep -q wolfram-engine; then
|
||
|
if [[ ! $autoYes ]]; then
|
||
|
echo "In order to create enough space on your SD card to upgrade,"
|
||
|
echo "the Wolfram Language and Mathematica software packages must be removed."
|
||
|
echo "If you don't know what these are, this won't affect you at all."
|
||
|
echo
|
||
|
echo -n "Remove Wolfram software? "
|
||
|
read
|
||
|
if [[ ${REPLY:0:1} != "Y" && ${REPLY:0:1} != "y" ]]; then
|
||
|
[[ $0 == "-bash" ]] && return 2 || exit 2
|
||
|
fi
|
||
|
sudo rm /opt/Wolfram/WolframEngine/10.0/SystemFiles/Java/Linux-ARM 2> /dev/null
|
||
|
sudo apt-get -y purge wolfram-engine
|
||
|
else
|
||
|
echo "Removing Wolfram software due to space constraints..."
|
||
|
sudo rm /opt/Wolfram/WolframEngine/10.0/SystemFiles/Java/Linux-ARM 2> /dev/null
|
||
|
sudo apt-get -y purge wolfram-engine
|
||
|
fi
|
||
|
else
|
||
|
echo "You don't have enough free space on your SD card to upgrade."
|
||
|
echo "Sorry, man. Delete some stuff or get a bigger card."
|
||
|
[[ $0 == "-bash" ]] && return 1 || exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
dpkg -l | grep -q a2pi && sudo apt-get -y --force-yes install a2pi
|
||
|
dpkg -l | grep -q apple2user && sudo apt-get -y --force-yes install apple2user gsport
|
||
|
if dpkg -l | grep -q wolfram-engine; then
|
||
|
sudo rm /opt/Wolfram/WolframEngine/10.0/SystemFiles/Java/Linux-ARM 2> /dev/null
|
||
|
if [[ $freeSpace -lt 750000 && $(apt-get -s install wolfram-engine | grep upgraded) ]]; then
|
||
|
sudo apt-get -y purge wolfram-engine
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
fi
|
||
|
sudo apt-get -y install wolfram-engine
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
fi
|
||
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
sudo apt-get -y install raspberrypi-ui-mods
|
||
|
{ cd /tmp; sudo apt-get -y autoremove; sudo apt-get -y autoclean; sudo apt-get -y clean; } > /dev/null
|
||
|
fi
|
||
|
|
||
|
if [[ $noobs ]]; then
|
||
|
echo "Updating NOOBS..."
|
||
|
|
||
|
# update Partition 3
|
||
|
mkdir -p /tmp/p3
|
||
|
sudo mount /dev/mmcblk0p3 /tmp/p3
|
||
|
sudo rm -rf /tmp/p3/os/* 2> /dev/null
|
||
|
if grep -q 'Raspple II' /tmp/p3/installed_os.json; then
|
||
|
echo "Downloading Raspple II lite..."
|
||
|
noobsUrl="ivanx.com/rasppleii/files/RasppleII_lite.zip"
|
||
|
noobsOSurl="ivanx.com/rasppleii/noobs-os"
|
||
|
distDir="Raspple_II"
|
||
|
sudo mkdir -p /tmp/p3/os/$distDir
|
||
|
sudo sed -i 's:/Raspbian:/Raspple_II:' /tmp/p3/installed_os.json
|
||
|
sudo wget -qO /tmp/p3/icon.png $noobsOSurl/Raspple_II.png
|
||
|
wget -qO- $noobsOSurl/slidesAB.tar | sudo tar -C /tmp/p3/os/$distDir -x
|
||
|
else
|
||
|
echo "Downloading NOOBS lite..."
|
||
|
noobsRoot="downloads.raspberrypi.org/NOOBS_lite/images/"
|
||
|
noobsDir=$(wget -qO- $noobsRoot | grep '^<tr><td' | tail -1 | grep -P -o 'href=".*?"' | cut -c 6- | tr -d '"')
|
||
|
noobsUrl=$noobsRoot$noobsDir$(wget -qO- $noobsRoot$noobsDir | grep -P -o 'href=".*.zip"' | cut -c 6- | tr -d '"')
|
||
|
noobsOSurl="downloads.raspberrypi.org/raspbian"
|
||
|
distDir="Raspbian"
|
||
|
sudo mkdir -p /tmp/p3/os/$distDir
|
||
|
sudo wget -qO /tmp/p3/icon.png $noobsOSurl/Raspbian.png
|
||
|
wget -qO- $noobsOSurl/marketing.tar | sudo tar -C /tmp/p3/os/$distDir -x
|
||
|
fi
|
||
|
sudo rm -rf /tmp/p3/cache 2> /dev/null
|
||
|
releaseDate=$(wget -qO- $noobsOSurl/os.json | grep 'release_date' | cut -f 4 -d '"')
|
||
|
sudo sed -i 's/"release_date".*$/"release_date" : "'$releaseDate'"/' /tmp/p3/installed_os.json
|
||
|
sudo sed -i 's/keyboard_layout=gb/keyboard_layout=us/' /tmp/p3/noobs.conf
|
||
|
sudo sed -i 's:/mnt/:/settings/:' /tmp/p3/installed_os.json
|
||
|
sudo sed -i 's@"icon".*,@"icon" : "/settings/os/'$distDir'/icon.png",@' /tmp/p3/installed_os.json
|
||
|
sudo cp /tmp/p3/icon.png /tmp/p3/os/$distDir
|
||
|
sudo wget -qO /tmp/p3/os/$distDir/os.json $noobsOSurl/os.json
|
||
|
sudo wget -qO /tmp/p3/os/$distDir/partition_setup.sh $noobsOSurl/partition_setup.sh
|
||
|
sudo wget -qO /tmp/p3/os/$distDir/partitions.json $noobsOSurl/partitions.json
|
||
|
sudo umount /tmp/p3
|
||
|
rmdir /tmp/p3
|
||
|
|
||
|
# update Partition 1
|
||
|
mkdir -p /tmp/p1
|
||
|
sudo mount /dev/mmcblk0p1 /tmp/p1
|
||
|
wget -qO /tmp/noobs_lite.zip $noobsUrl
|
||
|
sudo rm -rf /tmp/p1/*
|
||
|
sudo unzip -d /tmp/p1 /tmp/noobs_lite.zip
|
||
|
sudo sed -i 's/^runinstaller //' /tmp/p1/recovery.cmdline
|
||
|
sudo sed -i 's/silentinstall//' /tmp/p1/recovery.cmdline
|
||
|
grep -q 'keyboard=us' /tmp/p1/recovery.cmdline || sudo sed -i '1 s/^\(.*\)$/\1 keyboard=us/' /tmp/p1/recovery.cmdline
|
||
|
grep -q 'disablesafemode' /tmp/p1/recovery.cmdline || sudo sed -i '1 s/^\(.*\)$/\1 disablesafemode/' /tmp/p1/recovery.cmdline
|
||
|
sudo umount /tmp/p1
|
||
|
rmdir /tmp/p1
|
||
|
|
||
|
sudo sed -i 's/\(Raspple II release.*[^u]$\)/\1u/' /etc/issue
|
||
|
fi
|
||
|
|
||
|
echo
|
||
|
echo "*** Raspbian update completed. ***"
|
||
|
echo
|
||
|
|
||
|
cd /tmp
|
||
|
|
||
|
if [[ $updateA2Cloud ]]; then
|
||
|
wget -qO /tmp/a2cloud-setup ivanx.com/a2cloud/setup/
|
||
|
source /tmp/a2cloud-setup -y -r noSetGroups
|
||
|
if acmd -g /usr/share/gsport/disks/GSport\ Internet\ Starter\ Kit.2mg SYSTEM/FONTS/SIS.4.10 &> /dev/null; then
|
||
|
wget -qO /tmp/ua2.txt ivanx.com/rasppleii/files/a/ua2.txt
|
||
|
source /tmp/ua2.txt
|
||
|
fi
|
||
|
echo
|
||
|
echo "*** A2CLOUD update completed. ***"
|
||
|
echo
|
||
|
fi
|
||
|
|
||
|
cd /tmp
|
||
|
|
||
|
if [[ $updateA2Server ]]; then
|
||
|
wget -q -O /tmp/a2server-setup ivanx.com/a2server/setup/
|
||
|
if ps aux | grep -q [s]mbd; then
|
||
|
source /tmp/a2server-setup -y -r -w
|
||
|
else
|
||
|
source /tmp/a2server-setup -y -r
|
||
|
fi
|
||
|
echo
|
||
|
echo "*** A2SERVER update completed. ***"
|
||
|
echo
|
||
|
fi
|
||
|
|
||
|
cd "$origDir"
|
||
|
|
||
|
if [[ ! $autoYes ]]; then
|
||
|
echo
|
||
|
echo
|
||
|
echo "Your system has been updated and needs to reboot to use its new software."
|
||
|
echo
|
||
|
echo -n "Reboot now (recommended)? "
|
||
|
read
|
||
|
if [[ ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
|
||
|
sudo shutdown -r now
|
||
|
fi
|
||
|
else
|
||
|
echo "*** raspbian-update completed. ***"
|
||
|
sudo shutdown -r now
|
||
|
fi
|