Göra ”allt” från terminalen…

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Göra ”allt” från terminalen…

Inlägg av Johnny Rosenberg »

Okej, kanske lite missledande rubrik, men jag kom inte på någon…

Jag har fortfarande inte uppgraderat till Ubuntu 9.04 och det beror till stor del på att jag vill göra en total nyinstallation, då det är lite väl mycket saker som gått snett vid tidigare uppgraderingar, så det är för mycket att nysta i helt enkelt.

Men nu har jag ju en hel del som skiljer min installation från en ren installation i form av program som jag avinstallerat och andra program som jag installerat i efterhand, som passar mig bättre än det skräp som var med från början. Förutom det så har jag avinstallerat exempelvis OpenOffice.org och istället installerat original-OpenOffice.org så att jag nu har den betydligt snabbare och bättre 3.1 istället för värdelösa 2.4.1 eller sega 3.0.1. Nåja, onödiga detaljer att nämna kanske, men det var mest för att… ja, det vette fan…

Nåja, vad jag nu vill göra innan jag uppgraderar, är att skriva ett skript som installerar och avinstallerar åtminstone det mesta av det jag behöver respektive inte behöver automatiskt i ett enda kommando, men för att skriva ett sådant saknar jag lite kunskaper.

Vad skriptet inbegriper är ett antal saker, varav jag vet hur jag ska göra det mesta, men här och var har jag kunskapsluckor.

När det gäller vad som finns i originalförråden är det ju inga problem. Bara apt-get install program respektive apt-get remove program för respektive program, eller hur?

Men i vissa fall måste jag lägga till förråd. Det är väl bara att lägga till rader i /etc/apt/sources.list, eller hur? Exempelvis:

Kod: Markera allt

# Tänkte att man matar in version, exempelvis ”Jaunty”
# som argument till skriptet för att göra skriptet användbart
# på flera olika versioner av Ubuntu.
# Att man måste vara root när man kör skriptet är kanske
# uppenbart.

echo "deb http://ppa.launchpad.net/cdekter/ppa/ubuntu $1 main" >> /etc/apt/sources.list
Har inte provat, men visst borde det fungera?
Och givetvis lämnar jag felkontroller och liknande därhän i detta resonemang för att fokusera på ämnet.

Hur som helst, ofta ska man ju ha en nyckel också och då brukar alla instruktioner raskt gå över FRÅN terminalen TILL att man startar upp System → Administration → Programvarukällor och går vidare därifrån. Men visst borde man även kunna göra detta via ett skript? Vi förutsätter att jag har nyckelfilerna tillgängliga och att de ligger i samma mapp som skriptet.
Så HUR autentiserar jag förrådet i skriptet?

Vissa program finns inte i förråd, i alla fall inte om jag ska ha de senaste versionerna och inte Ubuntus egna uråldriga skitversioner. Har man väl laddat ner dem är det ju bara att köra deb-paketet. Om jag vet var ett deb-paket finns och vad det heter (kanske kan vara knepigt i och för sig, om olika versioner har olika namn…), hur laddar jag enklast hem det med ett skript?

Efter att jag fått ordning på ovanstående kommer nog några program att återstå som jag måste installera manuellt, men då jag tror att dessa inte är så många tänkte jag bara låta skriptet tala om för mig vilka program eller paket det rör sig om, ett i taget för varje gång jag trycker ↵, så att jag inte glömmer något…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
philip5
HC-IRCare
Inlägg: 1099
Blev medlem: 21 feb 2009, 14:32
OS: Kubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Uppsala
Kontakt:

Re: Göra ”allt” från terminalen…

Inlägg av philip5 »

Hur du gör skript av saker låter jag vara osagt för jag är inte riktigt helt säker på om jag förstår riktigt vad du menar alla gånger. Några hjälp på traven kan jag ändå ge om lite syntax.

Visst kan man köra "echo "deb http://ppa.launchpad.net/cdekter/ppa/ubuntu $1 main" >> /etc/apt/sources.list" i teorin men ibland kan rättigheter och hur delarna körs krångla till det så det är nog oftast bättre att köra med kommandot "tee" i en pipe så det ser ut t ex så här att lägga till en ny rad i source.list med ex min repo.

Kod: Markera allt

echo "deb http://philip.magicalforest.se jaunty extra " | sudo tee -a /etc/apt/sources.list
Godkända nycklar är något som apt sparar i en egen lista som påminner mycket om hur vanliga gnupg lagrar sina nycklar (inte så konstigt eftersom båda är gpg). När man väl lagt till en nyckel så finns den där tills man tar bort den och då behöver man så klart inte göra något extra varje gång ett sådant paket/repo ska verifieras. Apt använder kommandot apt-key för att hantera dessa nycklar. Man kan antingen hämta/importera nyckel direkt från en keyserver (om man vet dess Key ID) om den finns där eller från en fil. Två sätt att lägga till min nyckel för min repo och de paket som finns där är:

Direkt från keyserver:

Kod: Markera allt

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com CC96BCF9EEBAD1437601A7E9A078FBD295CC1732
Ladda ner nyckel och installera från fil:

Kod: Markera allt

wget http://philip.magicalforest.se/dists/philip.johnsson.asc && sudo apt-key add philip.johnsson.asc
Lite osäker på vad du menar med att ladda hem paket som du vet vart de finns men för att manuellt installera ett enskilt paket som inte finns i en repo utan skall installeras ändå görs med kommandot "dpkg":

Kod: Markera allt

sudo dpkg -i /path/to/paket.deb
Vad du exakt är ute efter sedan i ditt skript har jag inte riktigt förståelse för men jag hoppas det här i alla fall ger lite extra förståelse för de olika momenten och vad som kan användas från terminalen.
-------------------------------------------------------------
Min PPA för Ubuntu: http://launchpad.net/~philip5
Twitter: http://twitter.com/philip_johnsson
IRC: Philip5 @ freenode.net #ubuntu-se #kubuntu-se
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Göra ”allt” från terminalen…

Inlägg av Johnny Rosenberg »

Får väl försöka förklara lite bättre vad jag är ute efter då, på ett mer konkret sätt:

Just nu sitter jag med Ubuntu 8.10 och jag har av olika anledningar undvikit att uppgradera till Ubuntu 9.04, främst på grund av att ett program, AutoKey, som jag flitigt använder inte fungerade i Ubuntu 9.04 eller i andra distributioner med en nyare version av X-server än 1.5.x. Det är tydligen någon bugg som tillkommit i 1.6 som ingen verkar ha något större intresse av att fixa, men mannen bakom AutoKey har nu hittat en väg runt problemet och nya versionen fungerar därmed perfekt i Ubuntu 9.04 (har själv provat eftersom jag har tre datorer med Ubuntu 9.04).

Så nu är jag plötsligt intresserad av att uppgradera till Ubuntu 9.04 även på den dator jag använder mest, MEN då min dator vad gäller installerade program och så vidare, inte har så värst mycket gemensamt med originalinstallationen brukar det skita sig rejält när man ska uppgradera vida uppdateringshanteraren (det har blivit så varje gång och nu är jag trött på det) i form av hur många felmeddelanden som helst, så det är en hel del som inte fungerar som det ska i min nuvarande installation. Har ställt frågor om vissa av dessa fel här på forumet och på andra forum, men givetvis är det ingen som har en susning över huvud taget.

Så vad jag tänkte göra är att installerat Ubuntu 9.04 på en tom hårddisk, så att säga. Det är ju enkelt, men jag har ju med tiden (sedan Ubuntu 7.04) förstått vilka program som fungerar för just mig och vilka som inte gör det. Jag vill därför avinstallera allt som jag inte vill ha (jag vet att jag inte behöver men jag VILL och då väger det betydligt tyngre) och installera sådant jag vill ha istället. Som exempel kan jag väl nämna Rhythmbox, som inte alls uppfyller mitt viktigaste krav, nämligen att kunna spela FLAC-filer avbrottsfritt - har man en samling filer från en konsert så hör man tydligt hur publiken tystnar en kort stund mellan varje låt. Det enda program jag hittat som klarar det (UTAN cross fade, som också har sina nackdelar, särskilt i medleyn) är Songbird. Så jag vill avinstallera Rhythmbox och installera Songbird istället.

Då det är några tiotal program det gäller känns det lite jobbigt att göra detta manuellt varje halvår när det kommer en ny uppgradering av Ubuntu, så jag vill försöka automatisera så stora delar av detta som möjligt. Inser att jag inte kan automatisera ALLT (eller det kan jag säkert, men inte utan att lägga ner oskäligt mycket jobb på själva automatiseringen - det bör ju finnas någon form av balans där).

Andra exempel är att jag ju knappast vill använda mig av Operas värsta stenåldersversion, vilket är vad jag får om jag väljer Ubuntu-versionen av Opera. Bort med skiten bara och installera den senaste från Operas hemsida. Likadant med OpenOffice.org och eventuellt några andra program. Jag vet att man avråder från sådant av bland annat stabilitetsskäl, men hittills har jag ENBART haft stabilitetsproblem med Ubuntus värdelösa skitversioner (ska kanske tillägga att övriga distributioners versioner inte heller är så himla lyckade alla gånger, exempelvis Mandrivas), så det bekymrar mig inte så mycket. ”Det är min dator och jag gör vad jag vill med den” är väl min grundidé, så att säga. Problemet är just nu alltså att jag inte har kunskapen att göra ”vad jag vill” med min dator…

Jag tackar för de tips jag fick i förra inlägget och ska testa dem så snart som möjligt. Återkommer i tråden om fler frågor dyker upp.

Det där med ”tee” har jag inte sett innan av någon anledning… En fråga bara om exemplet echo "deb http://philip.magicalforest.se jaunty extra " | sudo tee -a /etc/apt/sources.list: Skriptet jag tänkt skriva tänkte jag ju köra exempelvis så här:

Kod: Markera allt

sudo MittSkript jaunty
Är det då nödvändigt att också i skriptet ha med sudo?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
philip5
HC-IRCare
Inlägg: 1099
Blev medlem: 21 feb 2009, 14:32
OS: Kubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Uppsala
Kontakt:

Re: Göra ”allt” från terminalen…

Inlägg av philip5 »

Johnny Rosenberg skrev:Är det då nödvändigt att också i skriptet ha med sudo?
Eftersom hela ditt script kommer köra saker som kräver root-access så är det enklaste att sätta hela skriptet som ett script för root med root-rättigheter och då behöver man så klart inte använda sudo i skriptet när det redan är/körs som root från början.

Förstår annars din tanke med skriptet. Största anledningen till att jag själv har min repo är för att den till stora delar innehåller uppdateringar eller anpassningar av program som jag vill ha utifrån den ubuntuversion som jag kör. Sedan är det en del som självklart föredrar att köra med officiella paket rakt igenom och kan argumentera att det är stabilare men så länge man vet vad man gör så behöver det inte bli instabilt för det. Det är väl det sista som är kruxet att många bara kör in vad som helst i kombination med vad som helst och hoppas på det bästa.

Projektet Ubuntu remix from ubuntu.se försöker väl göra ett skript som delvis gör vad du är inne på men med sina specifika önskemål. Du kanske kan titta på det skriptet och hämta idéer och anpassa det för dina önskemål? Jag har annars inte tittat så noga på vad de har gjort eller hur deras lösning ser ut men jag misstänker att det finns likheter med vad du är ute efter.
-------------------------------------------------------------
Min PPA för Ubuntu: http://launchpad.net/~philip5
Twitter: http://twitter.com/philip_johnsson
IRC: Philip5 @ freenode.net #ubuntu-se #kubuntu-se
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Göra ”allt” från terminalen…

Inlägg av Johnny Rosenberg »

Fann att det var onödigt att ange distributionens versionsnamn som argument till skriptet. Man kan få fram det ändå:

Kod: Markera allt

$ lsb_release -cs
jaunty
$
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"