Opdracht Linux/Unix Maarten Tutak 20 Mei 2012
1
Inhoudsopgave 1 Wine 1.1 Wat is Wine ? . . . . 1.2 Werking . . . . . . . 1.3 Emulator of niet ? . 1.4 Langdurig project . 1.5 Commerci¨ele edities 1.6 Licentie . . . . . . .
. . . . . .
4 4 4 5 5 6 6
. . . .
7 7 7 7 9
3 Mail-server 3.1 Wat is Mutt ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Configuratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 10 10 11
4 Bash-script 4.1 Wat is Bash ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Opstellen script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Het script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 12 12 14
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
2 Versiebeheersysteem 2.1 Wat is een versiebeheersysteem ? 2.2 Installatie . . . . . . . . . . . . . 2.3 Gebruik . . . . . . . . . . . . . . 2.4 Belangrijkste commando’s . . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
Maarten Tutak
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
2
Lijst van figuren 1 2 3 4
Wine draaiend onder Ubuntu Google Code repository . . . Revisies . . . . . . . . . . . . Bash . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
4 7 8 12
OpenSource Licentie’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Belangrijkste SVN commando’s . . . . . . . . . . . . . . . . . . . . . . . . . .
6 9
Lijst van tabellen 1 2
Maarten Tutak
3
1 1.1
Wine Wat is Wine ?
Wine is een opensourceprogramma om software die voor Windows geschreven is te gebruiken op andere besturingssystemen waaronder Linux en Mac OS X. Wine implementeert zowel de Win16- als Win32-API en kan dus zowel oude (16 bit-) als nieuwe (32 bit-)Windowsprogramma’s draaien, maar kan Windows als besturingssysteem zelf niet uitvoeren. De naam Wine staat voor Wine Is Not an Emulator. [6] http://www.winehq.org/
Figuur 1: Wine draaiend onder Ubuntu
1.2
Werking
Een programma in Windows maakt veel gebruik van standaard bibliotheken die bij Windows horen. In Wine zijn deze bibliotheken opnieuw geschreven zodat ze ongeveer hetzelfde doen. Des te meer een programma goed geschreven is en de standaardbibliotheken gebruikt, des te groter de kans dat het programma ook in Wine zal werken. De code van een programma wordt eerst door Wine nagekeken op aanroepen van de bibliotheken. Deze aanroepen worden vertaald, zodat de bibliotheken van Wine worden aangeroepen. Vervolgens wordt de code van het programma op volle snelheid uitgevoerd. Er wordt dus geen code ge¨emuleerd, maar enkel de aanroepen van de bibliotheken worden vertaald. In theorie zou een programma daarom ongeveer net zo snel moeten werken als in Micro-
Maarten Tutak
4
soft Windows. In de praktijk kan het programma langzamer zijn, vanwege de vertaalslag die gemaakt wordt. Maar een programma onder Wine kan ook sneller werken, omdat de bibliotheken van Wine eenvoudiger zijn en omdat de schijftoegang in Linux vaak sneller is. Omdat in Linux OpenGL gebruikt kan worden, werkt een programma dat OpenGL gebruikt vaak goed in Wine. In Linux is echter geen DirectX te gebruiken. Toch kunnen spellen met DirectX in Wine werken, omdat de aanroepen naar DirectX door Wine vertaald worden naar OpenGL.
1.3
Emulator of niet ?
Volgens de ontwerpers kan Wine geen emulator genoemd worden. Deze stelling veroorzaakt op internet vaak lange discussies. De ontwerpers defini¨eren een emulator namelijk als een virtuele machine en aangezien Wine geen virtuele machine is, is het dus geen emulator, zoals bijvoorbeeld VMWare. Bij een ruimere definitie van emulatie, zoals ”het simuleren van een omgeving bovenop een bestaande omgeving”, kan Wine wel een emulator worden genoemd.
1.4
Langdurig project
Het Wineproject loopt al sinds 1993. Wine is echter nog steeds maar beperkt effectief, veel programma’s zijn niet onder Wine aan de gang te krijgen. Dit hoewel veel bedrijven grote investeringen in Wine gedaan hebben. Een belangrijke reden hiervoor is dat de Windows-API erg complex is en Microsoft deze regelmatig verandert. Zo werd met de introductie van Windows 95 de bestaande 16 bit-API vervangen door een 32 bits-API. Met de introductie van Windows NT werd deze API nog eens flink uitgebreid. Bij Windows 95 werd een grafische interface DirectX geleverd. Bij de introductie van DirectX-versie 3 werd deze echter compleet vervangen door een nieuw systeem. De volgende versies waren minder radicaal, maar nog steeds werd iedere keer een flink stuk van de functionaliteit naar het verleden verwezen en vervangen door nieuwe functionaliteit. Met andere woorden, Wine loopt een beetje achter de feiten aan. Een andere reden hiervoor is dat het Wineproject erg ambitieus is; het wil een Windowsimplementatie tot stand brengen zonder afhankelijk te zijn van externe componenten. Het gevolg is dat behalve de Windows-kernel ook de bij Windows bijgeleverde bibliotheken nageprogrammeerd moeten worden. Verder wil men bijvoorbeeld dat Windows-programma’s van X11-lettertypen gebruik kunnen maken en men mikt niet alleen op Linux, maar ook op andere besturingssystemen. Na jaren ontwikkelen heeft Wine in maart 2008 aangekondigd versie 1 uit te geven. Op 17 juni 2008 is uiteindelijk versie 1.0 uitgegeven. Op 16 juli 2010 is versie 1.2 vrijgegeven. Er
Maarten Tutak
5
is na de stabiele release van 1.2 een nieuwe 1.3.x branch begonnen waarbij naar een stabiele Wine 1.4 toegewerkt wordt. Door Wine werd OpenGL al ondersteund, maar ook DirectX van Microsoft wordt vrij goed ondersteund. In 2009 wordt er ook gewerkt aan ondersteuning voor de USB-bus. Steeds meer programma’s gaan gebruikmaken van de Microsoft .NET-bibliotheken, en deze zijn nog niet eenvoudig onder Wine werkend te krijgen
1.5
Commerci¨ ele edities
• Crossover Office is een commerci¨ele versie van Wine, gericht op het draaien van kantoortoepassingen en dan met name Microsoft Office. • Cedega (voorheen WineX) is een commerci¨ele versie van Wine gericht op het draaien van spelletjes. Beide pakketten leveren in hun doelmarkt een iets betere compatibiliteit en werken het normaal vrij ruwe, gebruiksonvriendelijke Wine af tot een verkoopbaar product.
1.6
Licentie
Aanvankelijk werd Wine onder een BSD-licentie verspreid. Tot ongenoegen van de Wineontwikkelaars gaven bedrijven die commercieel met Wine bezig waren hun wijzigingen niet terug aan het Wine-project. Daarom werd in maart 2002 de licentie veranderd in de LGPLlicentie, zodat het nu verplicht werd wijzigingen vrij te geven. Meer uitleg over deze licenties kunt u vinden in de tabel hieronder Licentienaam
Uitleg
BSD
De BSD-licentie is een softwarelicentie voor opensourcesoftware. De naam komt van ”Berkeley Software Distribution”, software die zonder kosten werd gedistribueerd door de Universiteit van Californi¨e Berkeley.
LGPL
De GNU Lesser General Public License (meestal afgekort tot LGPL) is een licentie voor vrije software, bedacht door Richard M. Stallman en Eben Moglen. Het is een variatie op de GPL. De licentie heette eerst GNU Library GPL. Dit is een licentie bedoeld voor computersoftware die als onderdeel van een gesloten programma gebruikt mag worden, iets wat bij de GPL niet mogelijk is. Tabel 1: OpenSource Licentie’s
[4]
Maarten Tutak
6
2
Versiebeheersysteem
We gaan het versiebeheersysteem Subversion (SVN) gebruiken in combinatie met een repository op Google Code. Een voorbeeld van Google Code kan je zien in sectie 2.3.
2.1
Wat is een versiebeheersysteem ?
Een versiebeheersysteem of VCS (Engels: Version Control System) is een computerprogramma of een verzameling programma’s waarmee men de wijzigingen in documenten, programma’s of andere informatie bewaard in computerbestanden kan beheren. Een VCS wordt het meest gebruikt bij de ontwikkeling van software, zodat meerdere mensen wijzigingen kunnen aanbrengen aan dezelfde bestanden. Wijzigingen worden meestal aangeduid met een code, het ”revisienummer” of ”revisieniveau”. Elke wijziging wordt gekoppeld aan een timestamp en aan de persoon die de wijziging maakte. Wijzigingen kunnen vergeleken worden, hersteld en soms samengevoegd [5]
2.2
Installatie
Gebruik in je shell het volgende commando om Subversion te installeren : sudo apt-get install subversion
2.3
Gebruik
Figuur 2: Google Code repository
svn checkout <pad van repository>
cd svn commit -m ’Commit boodschap’
Maarten Tutak
7
In ons geval : pad van repository : https://eindopdracht-linux-unix.googlecode.com/svn/trunk/ folder : /home/Documenten/eindopdracht/ Op je Google Code repository kan je de veranderingen zien die je hebt aangebracht, de revisienummers, de commitboodschappen, ...
Figuur 3: Revisies
Telkens je klaar bent met je werk, en je wilt het opslaan doe je een commit naar de repository en word er een nieuwe revisie gemaakt. Als iemand anders een commit heeft gedaan, moet jij er voor zorgen dat je op de juiste revisie verder werkt : cd svn update
Maarten Tutak
8
2.4
Belangrijkste commando’s
Commando
Doel
Commit
Dit commando stuurt jouw aanpassingen naar de SVN server. Het zal aangepaste bestanden wijzigen, toevoegen en verwijderen.
Update
Dit commando vergelijkt jouw lokale directory met de SVN server. Als er aanpassingen gebeurt zijn, zal er geprobeerd worden de twee versies samen te voegen.
Checkout
Dit commando word gebruikt om de SVN boomstructuur van de SVN server af te halen. Dit commando zou je slechts ´e´en keer moeten gebruiken.
Status
Dit commando laat de status zien van de werkdirectory en bestanden. Als er lokale aanpassingen zijn gebeurd, zal het status commando deze aangepaste bestanden kenbaar maken.
Add
Wanneer je een nieuw bestand of directory cre¨eert, moet je de SVN server dit laten weten. Dit commando doet dat, Het bestand zal niet op de SVN server zichtbaar zijn totdat je een commit doet. Tabel 2: Belangrijkste SVN commando’s
[1]
Maarten Tutak
9
3
Mail-server
We gaan Mutt gebruiken om mails te versturen met ons bashscript dat te bekijken valt in sectie 4.3.
3.1
Wat is Mutt ?
Mutt is een opensource-, tekstgebaseerde e-mailclient en is beschikbaar voor Linux en Unix. Het werd oorspronkelijk ontworpen door Michael Elkins en is in 1995 vrijgegeven onder de GNU General Public License (Meer informatie in sectie 1.6). Momenteel wordt het programma beheerd via de Mutt Development Mailing List. Mutt wordt beschouwd als een zuivere MUA (Mail User Agent) omdat het niet zelfstandig e-mails kan versturen, hiervoor moet het steunen op een Mailserver of MTA (Mail Transfer Agent). Mutt ondersteunt kleurenterminals, POP3, IMAP, MIME, S/MIME, PGP/GPG, threaded sorteren en is erg configureerbaar. Doordat Mutt weinig geheugen vereist, compact en nietgrafisch is, is het programma geschikt voor het gebruik op eenvoudige systemen en via trage verbindingen. Omwille van de krachtige configuratiemogelijkheden is het programma populair in Unixomgevingen. Mutt is ontwikkeld naar analogie met het gelijkaardige tekstgebaseerde Unix-e-mailprogramma Elm. [3]
3.2
Installatie
De installatie van mutt is heel simpel, dit doe je met het volgende commando. sudo apt-get install mutt
Maarten Tutak
10
3.3
Configuratie
We gaan Mutt configureren om gebruik te maken van gmail. We gaan de IMAP en SMTP servers van gmail gebruiken om mails te ontvangen en te versturen. Dit wil zeggen dat je een gmail account nodig hebt om deze configuratie te laten werken. Mutt maakt gebruikt van een configuratie bestand : ˜/.muttrc Maak dit configuratie bestand aan met je favoriete editor. $EDITOR ˜/.muttrc Plak dan deze tekst in je configuratiebestand ˜/.muttrc en pas aan waar nodig. set from = ”[email protected]” set realname = ”Mijn echte naam” set imap user = ”[email protected]” set imap pass = ”mijnWachtwoord” set header cache =˜/.mutt/cache/headers set message cachedir =˜/.mutt/cache/bodies set certificate file =˜/.mutt/certificates set smtp url = ”smtp://[email protected]:587/” set smtp pass = ”mijnWachtwoord” set move = no #Stop asking to ”move read messages to mbox”! set imap keepalive = 900 Nu moet je nog twee directories aanmaken met de volgende commando’s mkdir .mutt mkdir .mutt/cache
Maarten Tutak
11
4
Bash-script
4.1
Wat is Bash ?
Bash, wat staat voor Bourne Again Shell, is een shell voor POSIX-systemen, en wordt veel gebruikt op Linux. Het is geschreven door GNU en is sterk ge¨ınspireerd op sh (afgeleid van de eerste twee letters van shell (Engels voor omhulsel)), het opdrachtregelprogramma van Unix. De naam is een woordgrapje op de naam van de originele shell, die voluit Bourne shell heet naar de auteur (Stephen Bourne). Bourne again wordt in het Engels hetzelfde uitgesproken als born again, hetgeen wedergeboren betekent. Bash streeft 100% achterwaartse compatibiliteit met sh na. Omwille van de rijke syntaxismogelijkheden van bash is het ook mogelijk in bash ingewikkelde opdrachtregels uit te voeren. Deze opdrachten kunnen worden opgeslagen in afzonderlijke bestanden (meestal omwille van hun lengte) en vormen dan scripts. [2]
Figuur 4: Bash
4.2
Opstellen script
Het bash-script maakt gebruikt van de eerder geconfigureerde mailserver, en het latex bestand. We lezen volgende variabelen in : • Aanspreking • Achternaam • Voornaam • e-mailadres We doen op deze variabelen een controle of ze niet leeg zijn, indien dit wel zo is stopt de uitvoering van het script. We doen tevens nog een controle of er een geldig e-mailadres word ingegeven, indien dit niet het geval stopt ook hier de uitvoering van het script.
Maarten Tutak
12
We veranderen de naam van de auteur en de naam in de voettekst naar de ingegeven vooren achternaam. We converteren nu het .tex bestand met de aangepaste naam naar een pdf met pdflatex We hernoemen de pdf nu naar naamvoornaam.pdf Tenslotte versturen we een gepersonaliseerde mail met Mutt, inclusief de aangepaste versie van het tex bestand in pdf formaat.
Maarten Tutak
13
4.3
Het script
#!/bin/bash regex="^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[com|edu|gov]+$"; echo "Welkom bij mailreviewer.sh"; read -p "Aanspreking: " a; #inlezen van aanspreking read -p "Naam: " naam; #inlezen van naam read -p "Voornaam: " voornaam; #inlezen voornaam read -p "e-mailadres : " email; #inlezen email #velden mogen niet leeg zijn. if [ -z "$a" ] || [ -z "$naam" ] || [ -z "$voornaam" ] || [ -z "$email" ]; then echo "Je hebt ´ e´ en of meerdere gegevens niet ingevoerd. Mailreviewer stopt nu." exit 1; fi; #Is het een gelid e-mailadres? if ! [[ $email =~ $regex ]]; then echo "Dit is geen geldig e-mailadres. Mailreviewer stopt nu." exit 1; fi; echo "-----------------------------------------------"; echo "Naam veranderen in tex bestand.."; sed -i "s|fancyfoot\[C\]{[A-Za-z ]*}|fancyfoot\[C\]{$voornaam $naam\}|g" eindwerk.tex; sed -i "s|author{[A-Za-z ]*}|author{$voornaam $naam\}|g" eindwerk.tex; echo "tex converteren naar pdf.."; #werkt alleen als script zich in zelfde locatie als eindwerk bevind. pdflatex -interaction=batchmode eindwerk.tex 1>/dev/null #output niet laten zien in bash #trim whitespaces from variables.. naam="${naam// /}"; voornaam="${voornaam// /}"; echo "eindwerk.pdf hernoemen naar $naam$voornaam.pdf"; #hernoemen mv eindwerk.pdf "$naam$voornaam".pdf; echo "Sending email.."; echo "Beste $a $naam, dit is een e-mail verstuurt met mutt. In de bijlage vind u mijn eindwerk." | mutt -s "Eindwerk Unix/Linux" $email -a "$naam$voornaam".pdf echo "klaar."; echo "-----------------------------------------------";
Maarten Tutak
14
Referenties [1] Linux From Scratch. Svn commando’s. edguide/chapter03.html, 2012.
http://www.linuxfromscratch.org/blfs/
[2] Wikipedia. Bash. http://nl.wikipedia.org/wiki/Bash, 2012. [3] Wikipedia. Mutt. http://nl.wikipedia.org/wiki/Mutt, 2012. [4] Wikipedia. Softwarelicenties. softwarelicenties, 2012.
http://nl.wikipedia.org/wiki/Lijst_van_
[5] Wikipedia. Versiebeheersysteem. Versiebeheersysteem, 2012.
http://nl.wikipedia.org/wiki/
[6] Wikipedia. Wine. http://nl.wikipedia.org/wiki/Wine, 2012.
Maarten Tutak
15
Index API, 4 branch, 6 DirectX, 5 emulator, 5 GNU, 12 IMAP, 11 kernel, 5 Linux, 5 MUA, 10 OpenGL, 5 opensourceprogramma, 4 POSIX, 12 revisienummer, 7 sh, 12 shell, 7 SMTP, 11 Ubuntu, 4 versiebeheersysteem, 7 Virtuele machine, 5 VMWare, 5
16