- järjestelmä on harvoin pahemmin vioittunut vaikka se ei boottaisikaan ja alkaa todennäköisesti boottaamaan kunhan se päivitettäisiin. Mutta milläs päivität sellaisen joka ei edes boottaa? Tällä skriptillä voi päivittää boottamattoman ubuntun boottamalla jostain muualta ja ajamalla sitten tämän skriptin.
- siis tämä korjaa koneet jotka ovat lakanneet boottaamasta joko päivityksen tai grubin asettelun seurauksena. Kyllä tämä usein muutenkin korjaa. Kaikki koneen ubuntut päivitetään kerralla ja saattaapa mintit sun muut lipsahtaa päivityskierteeseen nekin.
- ennen päivittämistä skripti poistaa kaikilta päivittämiltään osioilta roskikset, turhat imaget, extra-imaget ja headerit; siis toimia joita joskus ei haluta mutta puukota silloin koodia. Skripti raivaa pois muitakin päivittämistä estäviä tekijöitä. Lisäksi kovalevy-osiot tarkistetaan ja yritetään korjata lukuunottamatta sitä osiota jolla on bootattu eikä myöskään yhteistä kotia tarkisteta. Live-cd:tä tai live-muistitikkua ei päivitetä, mutta sensijaan päivitetään muistitikut joille on asennettu ubuntu.
- mikäli ubuntuja on monia ja monilla eri kovalevyillä on niiden kaikkien päivittäminen melkoinen työ normaalikeinoin. Tämä skripti päivittää ubuntut kaikilta löytämiltään levyiltä samallakertaa; skriptin toiminta on täysin automaattista eikä se koskaan kysy mitään: skriptin voi laittaa toimimaan ja itse poistua paikalta.
- mikäli ubuntuja on monta ja kenties jakautuneina eri levyille tulee tarve vakiona pysyvään valikkoon. Vakiona pysyvässä valikossa voi sallia järjestelmän hoitamisen tarkoitettujen skriptien käyttämisen vain jollekulle tai pitää jatkuvasti valikossa vain tarvittaessa koneeseen kytketyn pankki-Ubuntun kutsun. Vakiona pysyvä valikko on kehittäjien suosittelema - kehittäjistäkään useimmat eivät tosin taida tajuta mitään suositelleensa, sillä erittäin harvat tarvitsevat useita ubuntuja. GrubEdit täyttää vaatimukset vakioisen valikon teossa.
- olen ymmälläni - levylläni on yhtaikaa useampia ubuntuja ja yhden levyjärjestelmänä on btrfs ja tosten ext4. "sudo updata-grub2" löytää jommankumman, mutta ei kumpiakin.
#!/bin/bash
# paivita 10.8.2014 petteriIII
function KirjoitaOhje { echo '- aluksi kysytään salasanaa ettei sitä kysyttäisi sitten toiminnan aikana keskenkaiken. Salasana on kovalevyllä toimittaessa oma'
echo ' salasanasi ja muistitikulla se on ubuntu jos sitä edes kysytään.
- toimiva internet-yhteys on välttämätön; live-versioiden verkkoyhteys asennetaan aivan samoin kuin normaalistikin - muistitikun asetukset säilyvät mutta cd:n ei.
- kovalevyosiot tarkistetaan ja yritetään korjata lukuunottamatta sitä osiota jolla on bootattu. Windows on kylläkin kantona kaskessa.
- roskikset tyhjennetään, vain viimeinen image jätetään ja päivityksen esteitä poistetaan.
luettuasi tämän paina mitähyvänsä näppäimistön nappia.'
read -sn 1 key
}
function tarkistaKovalevyjenKaikkiOsiot () {
apu=""
read -t 5 -n 1 -p 'jos haluat tarkistaa kovalevyn perusteellisesti paina jotain kirjainta; silloin tarkistus kestää jonkinverran kauemmin mutta tarkistaa paremmin.' apu
echo
for osio in $(sudo blkid | grep -v swap | awk '{print $1}' | sed 's/\://g'); do
[[ ! $apu ]] && sudo fsck -MVCaf $osio || sudo fsck -MVCac $osio
echo ""
done
}
function unmountmnt {
cd / # umount ei onnistu, jos joku umountattavan kansio on valittuna
sudo echo ""
for mountattu in $(sudo mount | grep /mnt | awk '{print $3}')
do
[[ -e $mountattu ]] && sudo umount -l $mountattu
done
echo '/mnt:n mountit on poistettu'
}
function paivitaKaikkiOsiot () { # itseensä chroottaus onnistuu ihan kivasti joten tällätavoin voi ihan hyvin päivittää itsensä
unmountmnt
for Chrootosio in $(sudo blkid | grep -v swap | grep -v vfat | awk '{print $1}' | sed 's/\://g'); do
osiontyyppi=$(sudo blkid -o value -s TYPE $Chrootosio)
#[[ $osiontyyppi = btrfs ]] && [[
sudo mount -t $osiontyyppi $Chrootosio /mnt
[[ -d /mnt/boot/grub ]] && [[ $(cat /mnt/boot/grub/grub.cfg | grep menuentry.*Ubuntu ) ]] && {
echo; echo '********** päivitetään: '$Chrootosio
sudo mount -t sysfs none /mnt/sys && sudo mount -t proc none /mnt/proc && sudo mount --bind /dev/ /mnt/dev && sudo mount --bind /dev/pts /mnt/dev/pts && sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf && sudo mount -o bind /dev/shm /mnt/dev/shm
[[ -d /mnt/home/$(env | grep USER)/.local/share/Trash ]] && sudo rm -rf /mnt/home/$(env | grep USER)/.local/share/Trash # poistaa roskikset kaikilta osioilta joiden käyttäjä on sama kuin se jonka tililtä päivitä ajetaan eikä roskista tyhjennetä jos se on erilliskodissa
for n in $(ls /mnt/boot | grep config | grep -v $(ls /mnt/boot | grep config | sort | tail -1) | sed 's/config-//g'); do
sudo chroot /mnt apt-get --yes --force-yes purge 'linux-image-'$n
sudo chroot /mnt apt-get --yes --force-yes purge 'linux-image-extra-'$n # taitaa olla turha lause
sudo chroot /mnt apt-get --yes --force-yes purge 'linux-headers-'$n
done # Mikäli et halua poistaa imageja kommentoi nämä 5 riviä
sudo chroot /mnt rm -f /var/cache/apt/archives/lock /var/lib/aptitude/lock /var/lib/dpkg/lock /var/lib/apt/lists/lock
sudo chroot /mnt dpkg --force-confnew --configure -a
sudo chroot /mnt apt-get --yes --force-yes --fix-broken install
sudo chroot /mnt apt-get --yes --force-yes autoclean
sudo chroot /mnt apt-get --yes --force-yes autoremove
sudo chroot /mnt apt-get update
sudo chroot /mnt apt-get --yes --force-yes safe-upgrade
sudo update-grub2
}
unmountmnt
done
}
# Pääohjelma
KirjoitaOhje
echo ''; sudo echo
hommaalkoi="$(date +%s)"
tarkistaKovalevyjenKaikkiOsiot # sitä osiota jolta on bootattu ei tarkisteta.
paivitaKaikkiOsiot
echo -e 'päivitetty: '$(date +"%d-%m-%y %k:%M")'\t ja päivittäminen kesti: '$(date -d@$(echo $(date +%s)-$hommaalkoi-7200 | bc) | awk '{print $3}')