-
Notifications
You must be signed in to change notification settings - Fork 16
/
abs_makepkg.txt
215 lines (194 loc) · 12.5 KB
/
abs_makepkg.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
ABS & MAKEPKG
Résumé :
- ABS :
- PKGBUILD [+ *.install + patches]
- makepkg :
- lit infos (dépendances, URL des sources) de PKGBUILD + /etc/makepkg.conf, et télécharge et build un Arch Package
- Arch Package (*.pkg.tar.xz) :
- contient arborescence à installer, .PKGINFO [+ .INSTALL]
- installé et maintenu par pacman
- différentes installations :
- pacman -S : Arch packages officiels
- /var/abs/ : ABS des packages officiels
- AUR : ABS des packages non-officiels
- yaourt : peut construire avec l'ABS des packages officiels ou non
- sinon constuire soi-même son ABS
/var/abs/ :
- tree construit/màj par abs
- contient les "ABS" des packages officiels
- les autres "ABS" sont disponibles sous forme de tarballs sur le site d'AUR
/etc/abs.conf :
- ABSROOT : root directory (par défaut /var/abs/)
- SYNCSERVER : serveur cherché lors d'abs
- ARCH : sous-répertoire recherché, parmi i686 ou x86_64
- REPOS : repositories recherchés
"ABS" :
- contient :
- un PKGBUILD
- souvent un NAME.install
- parfois un NAME-VERSION-PATCH_RAISON.patch
- des fichiers conf, .desktop, icones de programme, ou tout autre fichier propre à un packaging particulier (et non
sources générales), installées dans le package() de PKGBUILD
PKGBUILD :
- Bash script donnant les instructions à makepkg pour download/check/patch/configure/make/créer Arch Package/clean le programme
- disons que le fichier source téléchargé est NAME-VERSION.tar.gz
- lit /etc/makepkg.conf, dont on peut utiliser les variables dont :
- CARCH pour inclure des dépendances en fonctions de l'architecture
- variables (absent si vide) :
- pkgname : nom du package NAME, tel qu'utilisé par pacman ([[:lower:][:digit:].-]+)
- pkgbase : nom de la base générals des splits packages, pour les split packages
- pkgver : VERSION sans le release number. [[:lower:][:digit:]._]+ : ne doit pas contenir de -, les transformer en _ pour cette variable
- pkgrel : release number
- epoch : epoch time de la release. Si non-0, remplace rôle de pkgver et pkgrel, au cas où versioning pose problème (par
exemple changement de versioning). Ne pas utiliser : mettre à 0.
- pkgdesc : phrase décrivant fonctionnalité rapidement. Ne doit pas contenir le nom du package.
- arch : array contenant les architectures supportées par le package, notamment "i686" ou "x86_64".
- url : site web du projet
- license :
- array avec nom de la licence, tel que nom d'un répertoire dans /usr/share/licenses/common/.
- précédé de "custom:" si absent de /usr/share/licenses/common/, sauf pour "BSD" (3 clauses), "MIT", "zlib/png",
"Python", absents, mais pas besoin de mettre "custom:"
- plusieurs noms si multilicensing ou fichiers avec différentes licenses
- groups : array contenant package groups auquel NAME appartient.
- depends : array contenant le nom des dépendances runtime directes (indirectes inutiles), avec éventuellement ">=pkgver", par exemple "glibc>=2.0"
- makedepends : pareil pour dépendances buildtime, mais non runtime. Ne doit pas contenir programmes du groupe
base-devel : autotools, gcc, binutils, libtool, make, patch, pkg-config par exemple.
- checkdepends : pareil pour dépendances seulement lors du check()
- optdepends : array de dépendances optionnelles, rajoutant des features, sous la forme par exemple : "PACKAGE: blabla
format support"
- provides : packages names provided par ce package de manière équivalente, avec éventuellement '=pkgver'
- conflicts : packages names des packages posant problèmes si installés aussi, avec éventuellement ">=pkgver"
- replaces : packages devant être supprimés/remplacés par le package courant
- backup : listes de fichiers (chemin relatifs à "/") dont pacman -R doit garder les backups lors suppression package, et
remplacer par une version nommée *.pacsave. En général, il s'agit des fichiers conf.
- options : listes d'options pour makepkg. Mettre "!" devant pour inverser effet :
- strip : strip symbols après compilation. Utilise commande strip.
- doc : ne supprime pas le répertoire doc/
- libtool : ne supprime pas les fichiers .la
- emptydirs : ne supprime pas les répertoires vides
- zipman : gzip les man pages
- !ccache : disable utilisation de ccache (réduit temps de compilation de gcc)
- !distcc : disable utilisation de distcc (compilation distrbuée sur plusieurs machines)
- !buildflags : n'utilise pas CFLAGS, CXXFLAGS, LDFLAGS de makepkg.conf
- !makeflags : pareil pour MAKEFLAGS
- install : nom du script *.install
- source : array de fichiers devant, si chemin relatif (par rapport à répertoire contenant PKGBUILD), être présents ou si
absolu, téléchargé, notamment par exemple : "http://example.com/$pkgname-$pkgver.tar.gz"
- noextract : ???
- [md5|sha[1|256|384|512]]sums : checksum des fichiers spécifiés dans source
- variables spéciales _cvsroot, _cvsmod, _gitroot, _gitname, etc. pour màj le pkgver via internet via le versioning
management system
- fonctions (exécutées par makepkg, que si définies) :
- build() :
- fait les patches, configure et make + fonction de package() absent, si celui-ci absent
- peut utiliser variable $srcdir et $pkgdir initialisées là où mettre le src/ et le pkg/
- check()
- fait le make check ou make test
- mksource()
- package()
- fait le make install, mais le fait dans $pkgdir
- package_NAME() :
- split packages : une seule source pouvant donner différents packages avec noms et fonctions différents
- ex : gcc source -> gcc_ada, g++, etc.
- utiliser plusieurs noms dans array pkgname
- faire makepkg --pkg NOM pour n'installer que l'un d'eux
- package_NAME sera utilisé et non package()
- chaque package_NAME() peut redéfinir les variables
- updatelist()
Script *.install :
- script optionnel à mettre dans l'ABS
- contient des fonctions exécutées avant ou après trois opérations de pacman : "install", "upgrade" ou "remove"
- s'appellent [pre|post]_[install|upgrade|remove]
- prend en premier arg. le pkgver-pkgrel, et pour *_upgrade, en 2ème arg. celui plus ancien et en 1er le nouveau.
- utilisation :
- mettre le script NAME.install dans l'ABS
- le référencer dans variable $install de PKGBUILD, mais pas $sources
- un fichier .INSTALL sera créé à coté du .PKGINFO
makepkg :
- étapes :
- download un fichier NAME-VERSION.tar.gz contenant les sources
- checke checksum de ce fichier
- vérifie dépendances
- le décompresse vers un répertoire src/
- le configure + make + make install vers un répertoire pkg, version décompressée d'un Arch Package (fakeroot environment)
- par défaut strip symbols
- génère .PKGINFO et .INSTALL
- compresse pkg vers un Arch Package .pkg.tar.*
- le fait en fonction de :
- /etc/makepkg.conf, dont (peuvent être modifiées en dehors de ce fichier conf) :
- DLAGENTS : array des commandes pour télécharger (tel que wget)
- CARCH et CHOST : par exemple, x86_64 (ou i686, ppc ou any) et x86_64-unknown-linux-gnu
- pour make : CFLAGS, CXXFLAGS, LDFLAGS, MAKEFLAGS
- INTEGRITY_CHECK : array des hash functions à utiliser pour le checksum, parmi md5, sha1, sha256, sha384, sha512
- BUILDENV : options :
- fakeroot : utilise un fakeroot (recommandé)
- distcc et ccache : les utilise
- color : colored output
- check : effectue le check
- sign : signe avec GPG
- STRIP_[BINARIES|SHARED|STATIC] : option utilisé pour strip, avec les binaires, shared et static libraries
- GPGKEY (optionnel) : clef privée pour signer package
- [PKG|SRC|SRCPKG]DEST : répertoire où sont placé src/ pkg/ et l'Arch package (défaut : répertoire du PKGBUILD).
- PACKAGER : mon nom (personne ayant fait l'Arch Package), tel que sera affiché dans les .PKGINFO
- PKGEXT : extension de l'Arch Package (".pkg.tar.gz" ou ".pkg.tar.xf")
- le PKGBUILD
- le faire sur une copie de l'ABS, pour préserver ABS tree, car il y a modification
makepkg #
-i #Installe l'Arch package après l'avoir built
-s #Installe compile-time et run-time dependencies.
-r #Supprime dépendances installées par -s, après build du programme.
--skipchecksums #Inverse
--skippgpcheck #N'effectue pas check GPG.
--skipinteg #Equivaut à --skipchecksums --skippgpcheck
-c #Supprime répertoires src/ et pkg/ temporaires après build.
-d #Ne fait pas de dependency checks
--pkg PACKAGE #Ne construit que le package PACKAGE pour un splitted package.
-g #Effectue uniquement les integrity checks (utile pour connaître checksums quand on crée un PKGBUILD)
-S #Construit, mais sans download les sources, en utilisant que le PKGBUILD, patches, etc.
#Utile pour ensuite télécharger soi-même les sources et build. Comme pour -e, préférer patcher via
#un ABS directement ou customizepkg.
-o #Download les sources et les extrait, mais les build pas. Inverse de -e.
-e #Construit, mais sans download les sources : assume qu'un répertoire src/ est déjà là. Utile pour
#patcher.
-R #Rebuild les .PKGINFO, .INSTALL, etc., mais pas le src/
--noconfirm #Pas de confirmation.
--[no]check #Effectue le check(), quel que soit les settings dans makepkg.conf
--[no]sign #Signe le package, quel que soit les settings dans makepkg.conf
--key STRING #Spécifie la clef utilisée pour signée le package (GPG). Si absent, utilise celle de makepkg.conf, et
#sinon celle du system keyring.
--noprogressbar #Pas de progress bar.
-f #N'aborte pas si un Arch package existe déjà dans répertoire courant/PKGDEST
--asroot #A faire si l'on utilise makepkg en root
-L #Crée un fichier de log dans le répertoire courant
-A #N'aborte pas si un champs arch=( ) est absent (pour vieux PKGBUILD)
-m #Ne met pas de couleur en output
-p FILE #Utilise non PKGBUILD mais FILE
--config FILE #Utilise non /etc/makepkg.conf mais FILE
Arch Package :
- équivalent de .deb chez Debian
- fichier pkg.tar.xf ou pkg.tar.gz contenant :
- les fichiers à installer dans la hierarchie créée virtuellement (par exemple pkg/usr/bin)
- un fichier .PKGINFO contenant infos pour pacman :
- name
- version
- description
- site web
- date de build
- packager
- taille
- architecture
- licence
- dépendances
- raison d'installation (isolée ou dépendance)
- installé par pacman -S
- peut être installé par pacman -U
Package group :
- ensemble de package, que l'on peut installer comme un seul (ex: "gnome")
Faire son propre Arch package :
- utiliser PKGINFO prototype tel qu'un déjà existant ou /usr/share/pacman/PKGBUILD.proto
Signature :
- créée sous forme de .pkg.tar.xz.sig, et envoyée avec la .pkg.tar.xz
namcap FILE #FILE étant un PKGBUILD ou un Arch package, imprime erreurs dans le packaging.
-i #donne infos supplémentaires.