Version 9 (modified by 16 years ago) (diff) | ,
---|
Ontwikkelen aan de Syn-3 source tree
Alle Syn-3 software bevind zich in een hele grote SVN tree. SVN is een versie beheer systeem: het zorgt ervoor dat we met meerdere mensen tegelijk aan de zelfde files kunnen werken, en dat je elkaar nooit in de weg zit. Conflicten worden indien mogelijk automatisch opgelost en oude versies kun je altijd terug halen. (je hoeft dus nooit meer extra backups te maken). Kortom: iedereen kan precies zien wanneer wat door wie is gewijzigd.
Ook bevat deze tree een groot aantal scripts om het meeste automatisch voor je te doen. Deze pagina legt je uit hoe je aan de tree komt en hoe deze is ingedeeld.
Vereisten
Theoretisch kan Syn-3 op alle Linux omgevingen gebouwd worden, omdat pakketjes altijd in een buildroot gecompiled worden. We gebruiken momenteel Slackware, Gentoo, Syn-3 en Ubuntu omgevingen om te bouwen en dit gaat prima.
Je bent in elk geval het volgende nodig:
- root account
- rsync
- svn (Subversion)
- mksquashfs
- Mogelijkheid om loop back devices te maken.
- Meer dan 10 gig diskspace
- mkfs.xfs versie 2.9.4 of hoger. (als je usbsticks wilt maken met mkcd)
- 4gig vrij op je /tmp, het liefst met tmpfs. tmpfs+grote swapfile is veeel sneller dan een gewoon filesystem!
- tar-1.13 in /bin/tar-1.13. (belanrijk, geattached aan deze pagina)
- Slackware pkgtools. Deze kan je rechstreeks uit de svn tree uitpakken:
desktop / # tar -xzf /home/user/opensyn3/npl/slackware/pkgtools-10.0.0-i486-1.tgz
Syn-3 sources
Toegang tot svn tree
Je bent eerst svn inlog account nodig. Deze maakt iemand van Datux aan op open.syn-3.nl.
Toegang tot dit systeem (trac) is ook handig. Dit doet iemand met Admin rechten bij de admin pagina.
Als je toegang tot trac hebt kun je via 'Browse Source' ook door de source bladeren. Ook staan er in de wiki vele verwijzigen naar files uit deze sources, wat erg handig is.
source tree ophalen
De eerste keer moet je een zogenaamde 'checkout' doen. Met dit commando haal je de hele tree binnen.
Dit hoeft niet persee als root:
test@psy ~ $ svn co https://open.syn3.nl/syn3/svndav/default/trunk opensyn3 Error validating server certificate for 'https://open.syn3.nl:443': - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually! - The certificate hostname does not match. Certificate information: - Hostname: * - Valid: from Thu, 03 Jul 2008 09:53:02 GMT until Sun, 18 Nov 2035 09:53:02 GMT - Issuer: * - Fingerprint: 3e:41:e4:45:ee:6d:eb:7c:6d:03:56:32:4b:d4:4b:4d:6d:2f:1b:48 (R)eject, accept (t)emporarily or accept (p)ermanently? p Authentication realm: <https://open.syn3.nl:443> Syn-3 Subversion repository Password for 'test': Authentication realm: <https://open.syn3.nl:443> Syn-3 Subversion repository Username: anonymous Password for 'anonymous': A opensyn3/tests A opensyn3/tests/mailserver A opensyn3/tests/mailserver/mailtest A opensyn3/tests/mailserver/mailtest/spam.mail A opensyn3/tests/mailserver/mailtest/mailtest A opensyn3/tests/mailserver/mailtest/normal.mail A opensyn3/tests/mailserver/mailtest/virus.mail ..duurt heel lang
Druk bij het eerste password op enter, dan mag je opnieuw proberen en kan je je svn username invoeren.
Indien je geen username hebt gebruikt je anonymous als naam EN password.
Na lange tijd vind je de tree onder opensyn3.
svn tree updaten
Om de wijzigingen van andere developers binnen te halen doe je af en toe een svn update:
root@builder:/home/psy/syn3# svn update U install/install.sh U install/lang_nl.sh U install/lang_pl.sh ... Updated to revision 3421.
Het is handig om dit regelmatig te doen, en hierna de status te controleren
svn nieuwe files en directoryies toevoegen
Als je een nieuw pakketje gemaakt hebt moet je deze directory markeren als toegevoegd:
root@builder:/home/psy/syn3# svn add npl/internetserver/ebtables A npl/internetserver/ebtables A npl/internetserver/ebtables/ebtables.pkg A npl/internetserver/ebtables/ebtables.version A npl/internetserver/ebtables/ebtables.md5 A npl/internetserver/ebtables/ebtables-v2.0.8-1.tar.gz A npl/internetserver/ebtables/ebtables.SlackBuild A npl/internetserver/ebtables/ebtables.arch
Dit gebeurd alleen lokaal, pas bij het committen (zie verderop) word de data ook naar de centrale server gestuurd.
svn status controleren
Om te zien of het updaten goed gegaan is en om te zien of je wijzigingen gemaakt hebt gebruik je svn status. Dit commando laat de locale status van je tree zien en doet dus niks met de server:
root@builder:/home/psy/syn3# svn status ? test ? npl/bla A npl/internetserver/ebtables A npl/internetserver/ebtables/ebtables.pkg A npl/internetserver/ebtables/ebtables.version A npl/internetserver/ebtables/ebtables.md5 A npl/internetserver/ebtables/ebtables-v2.0.8-1.tar.gz A npl/internetserver/ebtables/ebtables.SlackBuild A npl/internetserver/ebtables/ebtables.arch M npl/mailserver/syncml_openxchange/syncml_openxchange.SlackBuild ...
De eerste en tweede kolom zijn het belangrijkste, zie ook svn status --help:
First column: Says if item was added, deleted, or otherwise changed
- ' ' no modifications
- 'A' Added
- 'C' Conflicted
- 'D' Deleted
- 'I' Ignored
- 'M' Modified
- 'R' Replaced
- 'X' item is unversioned, but is used by an externals definition
- '?' item is not under version control
- '!' item is missing (removed by non-svn command) or incomplete
- '~' versioned item obstructed by some item of a different kind
Second column: Modifications of a file's or directory's properties
- ' ' no modifications
- 'C' Conflicted
- 'M' Modified
Let er dus op dat je geen conflicten hebt. Als je dit wel hebt is het het handigste om de conflicteren de file en bijbehorden troep weg te halen en nogmaals update te doen. Een andere optie bij tekstfiles is de boel handmatig mergen.
Wijzgingen opslaan op svn server
Hier heb je een account met schrijfrechten voor nodig!
Als je een aantal wijzigingen gemaakt hebt moet je deze committen (opslaan), onder volgende voorwaarden:
- Het gewijzigde onderdeel moet compleet zijn en het liefst als 1 geheel gecommit worden. (tenzij je een dag werk hebt, dan mag je een backup-commit doen)
- Niet meer dan 1 onderdeel of wijziging tegelijk committen, bij iedere wijziging duidelijk commentaar!
- Er moet niks stuk gaan waar anderen van afhankelijk zijn.
- Nieuwe onderdelen op de juiste plek in de tree adden. (eventueel vragen aan edwin) Verderop vind je een overzicht van de tree indeling.
- Indien het een pakket betreft, dit pakket eerst rebuilden alvorens te committen indien mogelijk.
Stel we hebben de volgende status:
root@builder:/home/psy/syn3/npl/internetserver# svn status A ebtables A ebtables/ebtables.pkg A ebtables/ebtables.version A ebtables/ebtables.md5 A ebtables/ebtables-v2.0.8-1.tar.gz A ebtables/ebtables.SlackBuild A ebtables/ebtables.arch A arptables A arptables/arptables.version A arptables/arptables.md5 A arptables/arptables-v0.0.3-2.tar.gz A arptables/arptables.SlackBuild A arptables/arptables.arch A arptables/arptables.pkg
Zo te zien heb ik 2 nieuwe pakketjes gemaakt, er zijn dus 2 commits nodig:
root@builder:/home/psy/syn3/npl/internetserver# cd ebtables/ root@builder:/home/psy/syn3/npl/internetserver/ebtables# svn commit -m 'nieuwe pakketje, nodig voor ethernet bridging en firewalling' Adding ebtables Adding (bin) ebtables/ebtables-v2.0.8-1.tar.gz Adding ebtables/ebtables.SlackBuild Adding ebtables/ebtables.arch Adding ebtables/ebtables.md5 Adding (bin) ebtables/ebtables.pkg Adding ebtables/ebtables.version Transmitting file data ...... Committed revision 3422. root@builder:/home/psy/syn3/npl/internetserver/ebtables# cd ../arptables/ root@builder:/home/psy/syn3/npl/internetserver/arptables# svn commit -m 'nieuw pakketje, nodig voor firewalling van arp pakketjes' Adding arptables Adding (bin) arptables/arptables-v0.0.3-2.tar.gz Adding arptables/arptables.SlackBuild Adding arptables/arptables.arch Adding arptables/arptables.md5 Adding (bin) arptables/arptables.pkg Adding arptables/arptables.version Transmitting file data ...... Committed revision 3423. root@builder:/home/psy/syn3/npl/internetserver/arptables#
Let op: Als je eenmaal iets commit, kan dit nooit meer uit de history verwijderd worden. File en directorys kun je wel uit de tree verwijderen, maar ze blijven uiteraard bestaan in de oude revisie.
Wijzigingen opslaan terwijl je geen rechten hebt
Als je geen schrijfrechten hebt in de syn3 tree, kun je je wijzigingen op de volgende manier opslaan in een patch file:
psy /home/psy/syn3/npl # svn diff > bugfix-ldap.patch
Deze file kun je opsturen naar info@datux.nl, waarna hij gereviewed word en eventueel in de tree opgenomen word. Binary files worden niet meegenomen in een diff, daarom is het altijd van belang de orginele url mee naar de sourcefiles mee te sturen!
Een fork maken
Soms kan het handig zijn een zogenaamde fork te maken. Jou wijzigingen worden dan gecommit in je eigen svn tree, zodat anderen er geen last van hebben. Zo kan je zoveel prutsen als je wilt, en als je klaar bent voeg je je wijzigingen weer toe aan de hoofd tree (trunk).
Voorbeelden en uitleg nodig'''
Branches maken
Soms kan het handig zijn een zogenaamde branch te maken.
Dit betekend dat je een bepaalde directory naar een appart deel op de SVN server kopieerd. Op deze manier kun je langere tijd aan grote wijzigingen werken, zonder dat mensen daar last van hebben.
Een nieuwe branch starten.
Stel je bent al een tijdje bezig en je hebt nog niet gecommit. En je denkt: Ik wil dit niet comitten in de hoofd tree (trunk) want dan heeft iedereen last van mijn wijzigingen:
psy /home/psy/syn3/install # svn status M meebezig
Kopieer de huidige versie, inclusief wijzigingen naar een branch:
psy /home/psy/syn3/install # svn copy . https://tracy.datux.nl/syn3/svndav/syn3/branches/installer-edwin Committed revision 4292.
Nu is er een nieuwe installer branch gemaakt op de SVN server. Om nu te zorgen dat je huidige werkdir aan die branch 'gekoppeld zit':
psy /home/psy/syn3/install # svn switch https://tracy.datux.nl/syn3/svndav/syn3/branches/installer-edwin G meebezig Updated to revision 4292. psy /home/psy/syn3/install # svn status psy /home/psy/syn3/install #
Nu is in jou werk directory alleen /home/psy/syn3/install gekoppeld aan de branch. De rest van je tree zit nog gewoon aan trunk:
psy /home/psy/syn3/install # svn info Path: . URL: https://tracy.datux.nl/syn3/svndav/syn3/branches/installer-edwin Repository Root: https://tracy.datux.nl/syn3/svndav/syn3 Repository UUID: 32fb8cd9-e6f8-0310-8218-8ae0250c70fb Revision: 4292 Node Kind: directory Schedule: normal Last Changed Author: edwin Last Changed Rev: 4292 Last Changed Date: 2008-11-06 10:31:18 +0100 (Thu, 06 Nov 2008) psy /home/psy/syn3/install # cd .. psy /home/psy/syn3 # svn info Path: . URL: https://tracy.datux.nl/syn3/svndav/syn3/trunk Repository Root: https://tracy.datux.nl/syn3/svndav/syn3 Repository UUID: 32fb8cd9-e6f8-0310-8218-8ae0250c70fb Revision: 4287 Node Kind: directory Schedule: normal Last Changed Author: edwin Last Changed Rev: 4285 Last Changed Date: 2008-11-03 00:53:54 +0100 (Mon, 03 Nov 2008)
Zodra alle commits komen nu dus in je eigen branch, en niemand heeft hier last van.
Terug switchen naar trunk
Dit kan zo:
psy /home/psy/syn3/install # svn switch https://tracy.datux.nl/syn3/svndav/syn3/trunk/install U meebezig Updated to revision 4292.
Een switch doet ook meteen een svn update zoals je ziet. Als je nu in de file 'meebezig' kijkt, zie je de trunk versie en niet je eigen branch.
Op deze manier kan je snel en makkelijk heen en weer switchen tussen trunk en je eigen branch.
Je branch terug mergen in trunk
Als je branch zo ver is dat je de wijzigingen in trunk wilt mergen, switch je eerst terug naar trunk en tik je het volgende:
psy /home/psy/syn3/install # svn merge https://tracy.datux.nl/syn3/svndav/syn3/branches/installer-edwin --- Merging r4288 through r4292 into '.': U meebezig psy /home/psy/syn3/install # svn status M . M meebezig
Nu zijn de wijzigingen in je werk directory gemerged. Je kan controleren of de merge goed gegaan is en dan een svn commit doen als alles klopt.
Je kan ook de nieuwste wijzigingen in de trunk naar jou branch mergen, op dezelfde manier. Switch dan eerst naar je branch en merge de trunk.
Huidige grote branches
Op dit moment is er ook een gcc4 branch, met daarin de nieuwste gcc4 en glibc2.7.
Deze kan handig zijn als je hiermee wilt experimenteren. Het project 'xbmc' compiled bijv. alleen maar met gcc4 en niet met de huidige gcc3.
Je KAN je werkdirectory omswitchten naar de branch, maar het is handiger om een apparte checkout te doen. Het is namelijk een complete syn-3 tree.
Dus, svn co https://tracy.datux.nl/syn3/svndav/syn3/branches/gcc4
Meer info
Voor meer info zie over de indeling van de source tree zie SynTree. Voor meer info over Syn-3 packets bouwen zie: SynPackaging
Attachments (1)
- tar-1.13 (112.9 KB) - added by 16 years ago.
Download all attachments as: .zip