====== Manipulation des paquets Debian ======
* Debian fournit un certain nombre d'outils pour manipuler les paquets principalement destinés au développeurs officiels.
* Ici l'objectif est de :
* créer des paquets qui ne sont principalement que des listes de dépendances pour faciliter les installations standard et les configurations de serveurs : serveurs de calcul meditation(s) par exemple.
* créer des paquets à partir d'un code ou d'une bibliothèque compilée localement.
* éventuellement modifier des paquets fournis par des prestataires externes
note: les numéros de version des paquets locaux sont faits à partir de la date AA.MM.JJa..z (ce qui laisse 26 versions par jour...)
===== Création d'un paquet de dépendances =====
* le paquet equivs fournit deux commandes :
* equivs-control pkg.equivs : qui crée un fichier squelette pkg.equivs à paramétrer
* equivs-build pkg.equivs : qui va construire le paquet debian en fonction du squelette.
===== Extraction / Re-création de paquets =====
Deux scripts inclus dans le paquet lpmmc-dpkg-tools :
* dpkg-extract-deb.sh : extrait un paquet dans un répertoire du même nom.
* dpkg-build-deb.sh : recrée un paquet à partir du contenu d'un répertoire
Méthode simple pour créer un paquet qui ne contient pas que des dépendances :
* créer un squelette de paquet "creux" avec equivs-control puis equivs-build
* extraire le paquet construit, le compléter (et supprimer le squelette devenu inutile)
====== Exemple: paquet python3-dmrgpy (calcul) ======
* Le code à installer est sur github : https://github.com/joselado/dmrgpy/tree/master
* Création d'un dossier dmrgpy dans /home/LINUX/lpmmc/CALCUL-HPC/ (arborescence des dossiers de développement des paquets locaux du labo)
===== Récupération du code et compilation =====
* Récupération du code et création d'une archive tar de base :
#!/bin/bash
git clone https://github.com/joselado/dmrgpy.git
tar cvfz dmrgpy.git.tar.gz dmrgpy/
* en suivant la doc de mise en place sur https://github.com/joselado/dmrgpy/tree/master
* ''cd dmrgpy''
* ''time python install.py''
* de nombreuses compilations de sources ''*.cc'' «with optimizations» et pas mal de «warnings«»...
* durée totale : ~12min
* en fin de compilation la bibliothèque se trouve dans ''src/dmrgpy''
$ ls src/dmrgpy/
algebra/ cvm.py dos.py excited.py functionfit.py juliarun.py mpsalgebratk/ nonhermitian/ pychain/ reconstruct.py timeevolution.py
ampotk.py dcex.py dynamics.py extrapolate.py funtk.py kondochain.py mpscpp2/ operatornames.py pychainwrapper.py simplechains.py topology.py
analyticcontinuation.py degeneracy.py edtk/ fermionchain.py gap.py kpmdmrg.py mpsjulia/ parafermionchain.py pyfermion/ spinchain.py vev.py
applyoperator.py densitymatrix.py effectivehamiltonian.py fermionchaintk/ groundstate.py manybodychain.py mps.py parallel.py pyparafermion/ spinfermionchain.py wavefunction.py
bosonchain.py distribution.py entanglement.py fermiondos.py inference.py meanfield.py multicorrelator.py parallelslurm_old.py pyspin/ taskdmrg.py writemps.py
correlator.py dmrgpy2pychain/ entropy.py fidelity.py __init__.py mode.py multioperator.py parallelslurm.py pyzn/ thermal.py
cpprun.py dmtk/ entropytk/ filesystem.py install.sh mpsalgebra.py multioperatortk/ pyboson/ randommps.py timedependent.py
* Dans la distribution Debian la bibliothèque devra être placée en /usr/lib/python3/dist-packages/ et les paquets Debian sont nommés python3-
===== Création du paquet python3-dmrgpy =====
* equivs-control python3-dmrgpy.equivs
* édition du fichier python3-dmrgpy.equivs pour obtenir :Package: python3-dmrgpy
Version: 24.03.26a
Architecture: amd64
Maintainer: Jean-Daniel
Section: misc
Priority: optional
Description: DMRGPY
This is a Python library to compute quasi-one-dimensional spin chains and fermionic systems using matrix product states with the density matrix renormalization group as implemented in ITensor (C++ and Julia versions). Most of the computations can be performed both with DMRG and exact diagonalization for small systems, which allows to benchmark the results.
* génération du paquet Debian vide : ''equivs-build python3-dmrgpy.equivs''
* on obtient un paquet ''python3-dmrgpy_24.03.26a_amd64.deb'' (vide, 2,4Ko)
* extraction du paquet pour obtenir l'arborescence de construction : ''dpkg-extract-deb.sh python3-dmrgpy_24.03.26a_amd64.deb''
* On obtient :$ $ ls -R python3-dmrgpy
python3-dmrgpy:
DEBIAN/ usr/
python3-dmrgpy/DEBIAN:
control md5sums
python3-dmrgpy/usr:
share/
python3-dmrgpy/usr/share:
doc/
python3-dmrgpy/usr/share/doc:
python3-dmrgpy/
python3-dmrgpy/usr/share/doc/python3-dmrgpy:
changelog.gz copyright README.Debian
* Il reste a remplir la structure du paquet debian
#!/bin/bash
mkdir -p python3-dmrgpy/usr/lib/python3/dist-packages/
rsync -avP --delete-before dmrgpy/src/dmrgpy python3-dmrgpy/usr/lib/python3/dist-packages/
* et de regénérer le paquet : ''dpkg-build-deb.sh python3-dmrgpy''
*
Note: le test minimal après une première installation
$ python
Python 3.11.2 (main, Mar 2 2024, 20:28:50) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from dmrgpy import spinchain
>>> quit()
a montré une dépendance au paquet python3-statsmodels ce qui engendré une modification du fichier ''control''
Package: python3-dmrgpy
Version: 24.03.26a
Architecture: amd64
Maintainer: Jean-Daniel
Installed-Size: 230492
Section: misc
Priority: optional
Multi-Arch: foreign
Depends: python3-statsmodels
Description: DMRGPY
This is a Python library to compute quasi-one-dimensional spin chains and fermionic systems using matrix product states with the density matrix renormalization group as implemented in ITensor (C++ and Julia versions). Most of the computations can be performed both with DMRG and exact diagonalization for small systems, which allows to benchmark the results.
(la valeur de Installed-Size a été calculée à partir de
$ du -sk python3-dmrgpy/usr/
230492 python3-dmrgpy/usr/
)
* Ménage : les sous répertoires dmrgpy (git clone) python3-dmrgpy (extraction du paquet ddeb) peuvent être supprimés $ rm -rf dmrgpy python3-dmrgpy python3-dmrgpy_*.changes python3-dmrgpy_*.buildinfo
$ du -sch *
45M dmrgpy.git.tar.gz
4,0K git-clone.sh
12M python3-dmrgpy_24.03.26a_amd64.deb
4,0K python3-dmrgpy.equivs
4,0K rsync-src-deb.sh
56M total
* le paquet debian étant dans l'arborescence de développement du dépôt local LPMMC, il sera automatiquement intégré/mis à jour lors du prochain ''rsync-DIST'' fait à la racine.
====== Code des scripts dpkg-* Pour info ======
* la dernière version à jour est dans le paquet lpmmc-dpkg-tools
#!/bin/bash
if [ $# -ne 1 ]
then
echo usage $0 paquet-debian.deb
exit 1
fi
pkg=`basename $1 .deb`.deb
if [ ! -f $pkg ]
then
echo $pkg inaccessible!!!
exit 1
fi
dirname=${pkg%%_*}
echo extraction dans $dirname
if [ -d $dirname ]
then
echo $dirname existe déjà!!!
#exit 1
else
mkdir -p $dirname/DEBIAN
dpkg-deb -x $pkg $dirname
dpkg-deb -e $pkg $dirname/DEBIAN
fi
#ls -R $dirname
echo `find $dirname -type f |wc -l` fichiers dans $dirname
du -sch $dirname
#!/bin/bash
if [ `id -u` -ne 0 ]
then
echo lancement en fakeroot
fakeroot $0 $*
exit 0
fi
if [ $# -ne 1 ]
then
if [ -f DEBIAN/control ]
then
wd=`pwd`
root=`readlink -f $wd`
base=`basename $root`
cd ..
else
echo usage $0 dossier contenant DEBIAN/control
exit 1
fi
else
base=$1
fi
if [ ! -f $base/DEBIAN/control ]
then
echo $base/DEBIAN/control inacessible!!!
exit 1
fi
cd $base
debdir=`pwd`
debdir=`readlink -f $debdir`
debname=`basename $debdir`
derversion=`ls -rt ../$base*.deb|tail -1`
echo derversion=\"$derversion\"
if [ "$derversion" != "" ]
then
echo "dernière version : " `basename $derversion .deb`
newfiles=`find . -type f -newer $derversion|wc -l`
if [ $newfiles -eq 0 ]
then
echo aucun fichier modifié postérieurement...
echo "On continue quand même ? (ou ^C)"
read
fi
echo '==============================================='
echo Fichiers modifiés postérieurement :
find . -type f -newer $derversion
echo '==============================================='
fi
newfiles=`find . -type f -newer DEBIAN/control|egrep -v "conffiles|md5sums"|wc -l`
if [ $newfiles -gt 0 ]
then
echo $newfiles modifiés après DEBIAN/control
find . -type f -newer DEBIAN/control|egrep -v "conffiles|md5sums"
echo '*** ERREUR !!! mettre à jour DEBIAN/control !!!'
echo '==============================================='
exit 1
fi
find . -type f -exec md5sum {} \; |grep -v DEBIAN >DEBIAN/md5sums
find etc/ -type f 2>/dev/null |sed 's/^/\//' >DEBIAN/conffiles
echo `find etc/ -type f -ls 2>/dev/null|wc -l` fichiers de configuration
cd ..
chown -R root.root $base
chmod -R 0644 $base
chmod -R +X $base
find $base -type f 2>/dev/null|grep -v usr/share/doc |xargs file|egrep 'ELF|executable' |awk -F: '{print $1;}'|xargs chmod a+x
echo `find $base -type f -executable -ls 2>/dev/null|wc -l` executables.
echo `find $base -type f -ls 2>/dev/null|wc -l` fichiers.
dpkg-deb -b $base .
ls -lh $base*.deb