#!/bin/bash
#function ValitseValittavistaYksi () {

#petteriIII 15.7.2014   grubin editointi täytyy suorittaa boottaus-järjestyksessä ensimmäisessä Ubuntussa.
function koodinpalasia () {
echo '
set default=number                      # mikä menuentry on valittuna kun grub aukeaa.
set timeout=number                      # montako sekuntia odotetaan ennenkuin bootataan automaattisesti
set locale_dir=($root)/boot/grub/locale # mikäli grubissa haluaa käyttää kansallisia merkkejä
set lang=fi                             # aseta Suomi näppäimistökieleksi grubissa

käyttöjärjestelmä-kutsuja ei kokonaisuudessaan tehdä itse, vaan ne kopioidaan sivulta grub.cfg ja senjälkeen editoidaan ainoastaan rivillä: menuentry heitto-merkkien välissä olevaa tekstiä. Kun editointi on toimivaksi havaittu niin voi alkaa varovasti esimerkiksi poistamaan "quiet splash" ja semmoista. Myös kernel-parametreja voi myöhemmin lisäillä, esimerkiksi: video=1280x1024-24@75
  
menuentry "Boottaus USB:ltä (BIOS:ia ei saa asetella)" {
	configfile (hd1,1)/boot/grub/grub.cfg
}

menuentry " " { # editoitu grub on näytön alussa ja koneen itsensä tekemä grub perässä. Niiden väliin voi laittaa tyhjän rivin.
	set root="(hd1,1)"
}

- koneen itsensä tekemä grub on ihan muuttamaton ja se toimii aina. Jos siis onnistut jotenkin sössimään editoinnin, niin senkun vain käytät koneen tekemää - vaikka se onkin epäselvä niin se toimii varmasti.
 

saat tehtyä grub.cfg:stä salasana-suojatun seuraavasti:
- vain superuser petteri saa editoida alkuvalikkoa antamalla tässä määrätyn salasanan, ei sudo-salasanaa
- antamalla tässä määritellyn salasanansa ville saa ajaa Ubuntun jonka "menuentry" rivin lopussa on: --users ville  . Muut käyttäjät eivät saa sitä   ajaa mutta superuser saa antamalla oman tässä määritellyn salasanan.
- kun halutaan editoida valikkoa käynnistettäessä siirretään valintakenttä editoitavan rivin päälle ja painetaan kirjainta: e . Silloin kysyttävä
- käyttäjänimi on petteri ja salasana 1234. 
- äsköisten ohjeiden mukaisen suojauksen saat päälle kun lisäät "editoituun grub:iin" seuraavan kaltaiset käskyt:
set superusers="petteri"
password petteri 1234  
password osmo 4321
password ville 0987' > hae_täältä_koodinpalasia 
}

function teorianteko () {
echo 'Editoiminen ei voi johtaa siihen ettei kone enää boottaisi vaan joudut vain käyttämään vanhaa grubia kunnes editoit oman osasi kuntoon. 

Jos editointisi ei toimi niin yleensä syyn näkee välittömästi kun menee editoriin uudestaan, mutta naurettaviakin syitä löytyy: esimerkiksi joskus ihmisen mielestä samanlaiset tekstit eivät olekaan koneen mielestä samanlaisia. 

Mikäli USB-tikut bottaavat koneessasi kannattaa GrubEdit sijoittaa sellaiselle. Tee boottaava USB-tikku uusimmasta "ei-alfa-tai-beta" Ubuntusta ja boottattuasi sille kopioi tikun omalla nautiluksella ohjelma kovalevyltä tikun kansioon: /home/ubuntu/Desktop. Tällöin Grubeditin saa ajettua kun boottamisen jälkeen tupla-näpäyttää hiirellä GrubEditin kuvaketta näytöllä ja näpäyttämällä avautuvassa ikkunassa: suorita päätteessä. Samalla kun editoidaan palautuu todennäköisesti myös kovalevyn boottauskyky.   

GrubEdit voi olla talletettuna millä medialla hyvänsä jolta saa nautiluksen avulla sen kuvakkeen näytölle; ajaakseesi GrubEditin kaksoisnäpäytä sen kuvaketta ja näpäytä aukeavasta valikosta "Aja päätteessä".   

GrubEdit toimii kaikille sudo-oikeuksisille, se ei vaadi asentamista eikä asetuksien tekemistä, se toimii yhtähyvin yksittäiselle Ubuntulle kuin silloin kun Ubuntuja ja muita käyttöjärjestelmiä on lukemattomia jakautuneena eri levyille. Editoitavat voivat käyttää mitähyvänsä tiedostojärjestelmää tai levytyyppiä tahansa, Ubuntu-versiolla ei ole väliä ja se voi ollaa 32- tai 64 bittinen kunhan editoiva Ubuntu ymmärtää niitä (=paketteja saattaa joutua lisäämään ja jos ajaa ohjelmaa live-CD:ltä täytyy sen olla samanbittinen kuin korjattavakin). Editoitavilla voi olla yhteiset tai erilliset kodit.

Voit editoida levollisin mielin: jos editoit alkuvalikon siihen kuntoon ettei kone enää boottaa niin voit palauttaa boottauskyvyn boottaamalla live-CD:llä ja tehdä GrubEditissä sellaisen alkuvalikon joka varmasti toimii boottaamalla live-CD:llä ja kopioimalla 07_custom sivulta grub.cfg tai historia.

Voit laittaa 07_custom:iin kutsurivit melkein milletahansa käyttöjärjestelmälle; ehkä joudut kirjoittamaan ne itse, kopioimaan sivulta grub.cfg tai hakemaan internetistä. Mutta parasta olisi pysyä niissä käyttöjärjestelmissä joissa on grub2 ja kutsua niitä käskyllä: configfile (hdx,y)/boot/grub/grub.cfg ; tämä tosin johtaa kaksiulotteiseen alkuvalikkoon ja hieman hitaanpaan boottaukseen, mutta tällatavoin kutsutut päivittävät itse oman alkuvalikkonsa etkä joudu tekemään sitä käsin.

Jos BIOS:issa muutetaan boottaava levy tai kovalevyn johdot vaihdetaan toisiin paikkoihin niin grubedit kehoittaa palauttamaan alkuperäisen tilanteen. 

Toimintansa aluksi grubedit testaa kaikkien kovalevyjen kaikki Linux-osiot miksili ollaan bootattu live-CD:llä. Tarkistuksen kunkin osion kohdalla voi lopettaa painamalla ESC.

Tapahtumia kannattaa ajamisen jälkeen tutkia pääte-ikkunasta, sillä kukaan ei kerkiä käynnin aikana tajuta viestien merkitystä.

Mikäli boottaus päätyy pimeään ruutuun saattaa että näytön arvot on auto-detektoitu väärin. Kirjoita tällöin kernel-riville esimerkiksi:
video=1280x1024-24@75 . Tietoa vbe-mahdollisuuksista saat grub-editorissa käskyllä: vbeinfo.
 ' > teoria
}

function ohjeidenteko () {
echo 'Editointi tulee aina lopettaa: tiedosto - sulje (file -close) ja senjälkeen pitää odottaa kunnes näyttö rauhoittuu.

Sivujen merkitys:

- 07_custom: tähän kirjoitetaan se koodi, joka luo alkuvalikon eteen ne halutut rivit. Tänne kirjoitettava teksti pääasiattain kopioidaan sivuilta grub.cfg ja hae_täältä_koodinpalasia. Tietoa kannattaa hakea myös internetistä ja kirjoittaa senmukaan, mutta alkuun sitä kannattaa välttää.

- historia: kun editointisi ei toimi löydät sen toimivan 07_custom:in sivulta historia
 
- grub.cfg: se alkuperäinen grub.cfg. Esimerkiksi jos olet asentanut uuden Ubuntun niin sivulla 07_custom ei edes ole kutsua uudelle Ubuntulle. grub.cfg:stä se löytyy: kopioi kutsu 07_custom-lehdelle. 

- grub: määreet siitä mitenkä grub.cfg muodostetaan seuraavalla kerralla. Tämän editointi vaikuttaa vanhaan grub.cfg:hen.

- teoria: millä perusteilla toimitaan.

- hae_täältä_ koodinpalasia: -

- fstab: sieltä näkee esimerkiksi mitä järjestelmään on liitetty.
 

Huomautuksia  

- kun haluat liittää Ubuntuusi uuden käyttöjärjestelmän kutsun: asenna se uusi käyttöjärjestelmä minnekkä haluat ja irroita siksiaikaa vanha kovalevy jos tarvitsee. Asennettuasi sen uuden käyttöjärjestelmän kytke järjestelmään kaikki siihen kuuluvat käyttöjärjestelmiä sisältävät levyt. Boottaa ja käynnistä skripti GrubEdit. Täytä sivu 07_custom kopioiden sivuilta grub.cfg ja hae_täältä_koodinpalasia. Editointi osio ja -levy eivät saa muuttua tai koko sivu 07_custom täytyy kirjoittaa uudelleen.

- muuten boottaus on melkoinen ongelma; koeta jos onnistaa mutta jos ei ala boottaamaan kovalevyltä tai boottaa jonnekin muualle kuin Ubuntuun niin boottaa live-CD:llä ja aja skripti ChroottaaJaKorjaa.
test
- näyttöongelmin saattaa auttaa käsky: sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.broken sillä vaikka sitä ei nykyään tarvitakaan niin väärin kasattua xorg.conf:iakin kunnioitetaan ja boottaus saattaa loppua siihen.

- yksi syy siihen ettei boottaa tai että toiminta on ihmeellistä voi olla se että viitataan olemattomiin UUID:eihin. Tarkista ne sivuilta 07_custom ja fstab; sivulta grub.cfg näet mitä niiden pitäisi olla.

- tällä ohjelmalla on sivuvaikutuksena se, että se luo kotihakemistoon kansion nimeltään .GrubEdit. Sen voi editoituaan poistaakin, mutta koska historia alkaa silloin uudestaan kannattaa harkita poistaako sen ja milloin poistaa.' > käyttöohje 
}

function Osiojollaollaan { apuu=$(sudo df | grep -m 1 /dev/ | awk '{print $1}'); osiojollaollaan=${apuu##*/dev/}; } # boottausosion looginen nimi tyypiltään sdx

function Levyjollaollaan { apu=$(ls -l /dev/disk/by-id | grep '/sda1' | awk '{print $9}'); levyjollaollaan=${apu%%-part*};} # boottausvälineen fyysinen nimi

Osiojollaollaan; Levyjollaollaan; echo 'Nyt ollaan osiolla:'$osiojollaollaan'ja se on tehty levyllä:'$levyjollaollaan
[[ ! -d /var/lib/os-prober/mount ]] && sudo mkdir /var/lib/os-prober/mount # lisäys 14.04; mikä on tämän lauseen tehtävä ? Paikata kehittäjien koodia ?
sudo apt-get install btrfs-tools
sudo os-prober 
sudo update-grub2
[[ ! -d ~/.GrubEdit ]] && mkdir ~/.GrubEdit
cd ~/.GrubEdit
[[ ! -f /etc/grub.d/07_custom ]] && sudo cp /etc/grub.d/40_custom /etc/grub.d/07_custom
[[ ! -f käyttöohje ]] && ohjeidenteko
[[ ! -f teoria ]] && teorianteko
[[ ! -f hae_täältä_koodinpalasia ]] && koodinpalasia
[[ ! -f historia ]] && touch historia
[[ ! -f kovalevy ]] && touch kovalevy
echo -e $osiojollaollaan'              looginen osionimi\n'$levyjollaollaan'  fyysinen levynimi\n' >> kovalevy
sudo blkid > UUID
sudo gedit /etc/grub.d/07_custom käyttöohje teoria hae_täältä_koodinpalasia historia UUID /boot/grub/grub.cfg /etc/default/grub /etc/fstab kovalevy # /boot/grub/device.map 
echo -e '\n##############  07_custom   päivänä:'`date`'      #####################' >> historia
echo -e '### Nyt ollaan osiolla:'$osiojollaollaan' ja se on levyllä:'$levyjollaollaan'\n' >> historia
sudo cat  /etc/grub.d/07_custom >> historia 
sudo update-grub2
cd ~

