====== 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