Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: petteriIII - 30.07.14 - klo:08.59

Otsikko: Koneen korjaaminen bootattaavaksi
Kirjoitti: petteriIII - 30.07.14 - klo:08.59
- 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.

- skripti kopioidaan muistitikulle muistitikun omassa päätteessä "sudo nautilus":ksella. Vaikea homma ja täytyy jättää niille jotka ovat käyttäneet linuxia paljon. Tai voihan skriptiä ajaa myös boottaamattoman ubuntun kovalevyltä tai toiselta muistitikulta.

- 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.

Koodia: [Valitse]
#!/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}')
Otsikko: Vs: Koneen korjaaminen bootattaavaksi
Kirjoitti: JaniAlander - 30.07.14 - klo:10.19
- skripti kopioidaan muistitikulle muistitikun omassa päätteessä "sudo nautilus":ksella. Vaikea homma ja täytyy jättää niille jotka ovat käyttäneet linuxia paljon. Tai voihan skriptiä ajaa myös boottaamattoman ubuntun kovalevyltä tai toiselta muistitikulta.

Hieno idea tuo skripti. Mistä alkaen muuten "sudo nautilus" ja sitten graafinen kopiointi on ollut erikoisen vaikeaa? Eihän se ihan tekstimuotoinen cp komentokaan varsinaisesti siitä vaikeimmasta päästä ole, kunhan vain tietää mihin hakemistoon kopioi.
Otsikko: Vs: Koneen korjaaminen bootattaavaksi
Kirjoitti: welmar - 30.07.14 - klo:11.37
Mistä alkaen muuten "sudo nautilus" ja sitten graafinen kopiointi on ollut erikoisen vaikeaa? Eihän se ihan tekstimuotoinen cp komentokaan varsinaisesti siitä vaikeimmasta päästä ole, kunhan vain tietää mihin hakemistoon kopioi.
Kaikki on suhteellista. Jos esim. kopioinnista puhutaan niin dd:llä on kokeneemmalle käyttäjälle hyvin yksinkertaista tehdä vieläpä varmemmin toimiva live-tikku, silti usein monet pitää unetbootinia helpompana. Monille vaikeus tulee ihan siitä että pitää pääte avata, se tuntuu jotenkin mystisen vaikealta vaikka vain yksi käsky pitäisi muistaa eikä sitäkään kokonaan jos tabulaattorilla täydentää.
Otsikko: Vs: Koneen korjaaminen bootattaavaksi
Kirjoitti: petteriIII - 01.08.14 - klo:14.20
Siinähän se vaikeus osittain on että ei kannata edes ehdotella että joku käyttäisi terminaalia sillä terminaalia käyttävältä taitaa mennä mainekin. Mutta skriptin voi ajaa automaattisestikin boottauksen jälkeen. Ubuntussa se tapahtuu seuraavasti:

- boottaa USB-muistitikulle. Muistitikun pitää olla USB-creatorilla tehty siten että tikulla on vähän tilaakin ja nettiyhteyskin pitää olla määritelty.
- vie paivita-skripti kansioon: /home/ubuntu
- anna päätteessä käsky: gnome-session-properties
- näpäytä: add
- kenttään: command  kirjoita: gnome-terminal --maximize -x  /home/ubuntu/paivita
- add
- close

Näin tehdyltä USB-muistitikulta päivitys käynnistyy automaattisesti boottauksen jälkeen . Eipä silti, monikohan saa bootattua USB:ltä joten ohje taitaa vain siirtää suolta allikkoon.
Otsikko: Vs: Koneen korjaaminen bootattaavaksi
Kirjoitti: petteriIII - 18.09.14 - klo:15.20
- 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.

Koodia: [Valitse]
#!/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}')