Autotools
$ ./configure --prefix=$wherever #(z.B. '/usr')
$ make
# make DESTDIR=$wherever_else install
CMake
$ cmake -DCMAKE_INSTALL_PREFIX=$whereever`
$ make
# make DESTDIR=$wherever_else install`
Von Hand
$ make
$ cp some_files /usr/bin/
make DESTDIR=$fakeroot_dir
source
in den Paketmanager geladenpkgbuild_version=5
pkgname=packagename
pkgver=1.1.1
# ....
# einige Arrays
# ....
# ls-me download -> nach $sources_dir
sources=(
"http://www.somedomain.com/${pkgname}-${pkgver}.tar.gz"
)
# --no-cert-check flag deaktiviert SSL-Check
# lfs-me checksums -> Prüfsummen erzeugen
# lfs-me check -> Prüfsummen von installiertem System testen
sha1sums=(
'046fb3a32f7c2b21ae30d7f5566b112ca577f1dc'
)
# ....
# einige Funktionen
# ....
( weitere Details später )
Quellcode vorbereiten:
lfs_me_prepare() {
tar -xf "${sources_dir}/${pkgname}-${pkgver}.tar.gz" -C "$build_dir"
cd "${build_dir}/${pkgname}-${pkgver}"
#gegebenenfalls anwenden von patches
./configure --prefix=/usr
}
Kompilieren:
lfs_me_build() {
cd "${build_dir}/${pkgname}-${pkgver}"
make
}
Tests ausführen:
lfs_me_check() {
cd "${build_dir}/${pkgname}-${pkgver}"
make check
}
Installieren in's fakeroot:
lfs_me_install() {
cd "${build_dir}/${pkgname}-${pkgver}"
make DESTDIR="$fakeroot_dir" install
# Der Ordner $fakeroot_dir wird automatisch erstellt
}
Dateien:
find . -type f | grep -ve '^\./FILES$' > "${fakeroot_dir}/FILES"
sed -i -e "s/^\\.//" "${fakeroot_dir}/FILES"
Symlinks:
find . -type l > "${fakeroot_dir}/LINKS"
sed -i -e "s/^\\.//" "${fakeroot_dir}/DIRS"
Ordner:
find . -type d > "${fakeroot_dir}/DIRS"
sed -i -e "s/^\\.//" "${fakeroot_dir}/LINKS"
SHA1-Checksummen:
find . -type f -exec sha1sum {} \; | grep -ve "\\./sha1sums$" \
> "${fakeroot_dir}/sha1sums"
tar.xz
von $fakeroot_dir
inklusive PKGBUILD
, FILES
, DIRS
, LINKS
und sha1sums
fakeroot tar -cf "${pkgname}-${pkgver}.pkg" \
-I "xz --threads=0 -c -z -" -C "$fakeroot_dir"
Installation:
rsync -rlpgoDK "${fakeroot_dir}/" /
-r : |
rekursiv |
-l : |
Symlinks erhalten |
-p : |
Berechtigungen erhalten |
-g : |
Gruppe erhalten |
-o : |
Besitzer erhalten |
-D : |
Gerätedateien erhalten |
-K : |
Symlinks auf Ordner nicht mit Ordnern überschreiben |
Beispiel: /usr/lib64 -> lib
, Paket enthält /usr/lib64
Vor Installation als root:
lfs_me_preinstall() {
# Abbruchbedingung
[ ! -z $LFS_TGT ] \
|| lfs_me_error "The LFS_TGT environment variable isn't set!" false
}
Nach Installation als root:
lfs_me_postinstall() {
# Info Pages updaten
echo "Adding info pages"
install-info "/usr/share/info/${pkgname}.info" /usr/share/info/dir
# Benutzer anlegen
useradd someuser
chown -r /some/dir someuser
}
EVERYTHING
)FILES
löschen, wenn nicht in EVERYTHING
DIRS
sortieren (Unterordner zuerst) und löschen, wenn nicht in EVERYTHING
LINKS
, falls sie auf nichts mehr zeigenFunktionen vor/nach dem Löschen:
lfs_me_preremove() {
echo "Removing info pages"
install-info --delete "/usr/share/info/${pkgname}.info" /usr/share/info/dir
}
lfs_me_postremove() {
# Backups wiederherstellen oder ähnliches
}
$install_prefix/$index_dir
├── $pkgname
│ └── $pkgver
│ ├── sha1sums
│ ├── PKGBUILD
│ ├── DIRS
│ ├── FILES
│ └── LINKS
└── version
lfs-me indexlist
lfs-me indexlist regex
lfs-me indexlist | grep regex
Lösung:
overwrite=(
'/usr/lib/bla.so'
)
dependencies=(
"!$pkgname"
"python>=3"
"linux=4.1"
)
!
, außerdem =
, >
, <
, >=
, <=
Backup von Config-Dateien:
backup=(
'/etc/config.file'
)
Zu welchem Paket gehört eine Datei?
lfs-me owner