#!/bin/bash       
# paivita 10.11.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.'; } 

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
  #[[ $osiontyyppi = btrfs ]] && btrfs scrub   # btrfs-check
  [[ ! $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)
  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ä eriliskodin roskisia tyhjennetä koskaan

  # Kohdekoneen muistin vapauttaminen ei helpota tätä ohjelmaa. Kohdekoneen siistimisen syy onkin se, että kohdekone pärjäisi tulevaisuudessa itsekseen. 
  sudo chroot /mnt tune2fs -m 1 /dev/$chrootosio # rajoittaa pääkäyttäjälle varattua kovalevytilaa yhteen prosenttiin.

  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 # turha lause, mutta muistutuksena siitä mitä tapahtuu.
    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 -y upgrade
  sudo update-grub2 /dev/$Chrootosio
}
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}')


  


 
