2011-05-17 4 views
8

J'ai un programme de ligne de commande trivialement simple qui se compose littéralement d'un script python et de certains scripts de shell d'aide. J'aimerais en savoir plus sur l'emballage de ce programme, même si c'est trivial. D'après ce que j'ai compris, j'ai utilisé la route configure/make/install. Comme je n'ai rien à configurer, ou quoi que ce soit à faire, je simplement créé un Makefile avec rien, mais une installation section:checkinstall crée deb inutile?

install: 
     cp ./myProgram /usr/bin/my-program 
     chown root:root /usr/bin/my-program 
     chmod 777 /usr/bin/my-program 
     cp -r ./ProgramResources /usr/lib/my-program 
     chown -hR root:root /usr/lib/my-program 
     chmod -R 777 /usr/lib/my-program 

À ce stade, mon programme installe et fonctionne très bien avec sudo make install.

Alors, je tente de créer un fichier deb en utilisant checkinstall comme suit:

sudo checkinstall sudo make install 

Il semble aller au-delà de la partie, car il donne l'installer avec succès, mais échoue:

======================== Installation successful ========================== 
cp: cannot stat `//var/tmp/tmp.jKCmESc0v7/newfiles.tmp': No such file or directory 

Copying files to the temporary directory...OK 

Stripping ELF binaries and libraries...OK 

Compressing man pages...OK 

Building file list... FAILED! 

Building Debian package...OK 

Installing Debian package...OK 

Erasing temporary files...OK 

Deleting temp dir...OK 


********************************************************************** 

Done. The new package has been installed and saved to 

... 

Le programme est installé, mais autant que je sache, ce fichier .deb nouvellement fait ne fait rien. -L donne mon dpkg-programme ne

/. 

et supprimer manuellement et installation à partir du fichier deb ne semble pas faire quoi que ce soit - il ne fait aucun fichier mis partout. Donc, (1) Y a-t-il quelque chose qui ne va pas dans mon approche? et (2) Comment puis-je résoudre le problème de checkinstall?

Merci beaucoup pour les réponses, même si je suis bon avec le code, je n'ai jamais rien connu sur l'emballage/la distribution.

Répondre

3

Je ne sais pas si cela répond exactement à la question, mais voici ce que je suis arrivé à ce jour (sur ubuntu lucide, checkinstall 1.6.1):

J'ai essayé de construire un projet open-source, qui a construit ça va. Ensuite, je l'ai essayé d'emballage pour debian:

checkinstall -D --install=no --pkgname=$PKGNAME --pkgversion=0.0.1 --pkgrelease="svn-001" [email protected] --strip=no --stripso=no --addso=yes

En gros, cela a échoué au même Building file list... FAILED!; et un grep: /var/tmp/tmp.NaoiwTHT6F/newfile: No such file or directory similaire a été rapporté.

J'ai également essayé d'ajouter make à la fin de la commande checkinstall ci-dessus - cela n'a pas beaucoup fait non plus.

Enfin, j'ai essayé ceci:

make clean
checkinstall -D --install=no --pkgname=$PKGNAME --pkgversion=0.0.1 --pkgrelease="svn-001" [email protected] --strip=no --stripso=no --addso=yes -d2 make

Le commutateur -d2 est de permettre le débogage; et ... make sera réexécuté une fois de plus.

Le -d2 va imprimer le répertoire temporaire:

debug: The temporary directory is: [ /var/tmp/tmp.NaoiwTHT6F ]
, il peut être vérifié par la liste ... Et en effet, je peux confirmer qu'une newfile n'est pas généré il y a dans mon cas (cependant, il y a newfiles, newfiles.installwatch, newfiles-tar et newfiles.tmp).En fait, se révèle checkinstall est un script bash, et on peut donc confirmer que newfile apparaît uniquement une fois il:

$ grep 'newfile ' `which checkinstall` 
    grep '^/home' ${TMP_DIR}/newfile > /${TMP_DIR}/unwanted 

En outre, le débogage pointera ces fichiers/répertoires:

debug: INSTW_EXCLUDE=/dev,/path/to/myproject-build,/proc,/tmp,/var/tmp, 
debug: INSTW_ROOTPATH=/var/tmp/tmp.NaoiwTHT6F 
debug: INSTW_LOGFILE=/var/tmp/tmp.NaoiwTHT6F/newfiles.tmp 
debug: INSTW_DBGFILE=/var/tmp/tmp.NaoiwTHT6F/dbgfile 

Notez que par défaut, le chemin d'accès à mon dossier de construction, /path/to/myproject-build est exclu - et c'est là que ce projet stocke également les exécutables construits!

 

Apparemment, quand make au sein checkinstall va sur la construction pour la première fois, il peut capturer nouvellement généré des fichiers exécutables - ils seront répertoriés dans ${TMP_DIR}/newfiles; Cependant, dans mon cas, le problème est que les exécutables finissent sous le même répertoire où checkinstall est appelé; ainsi, à cette boîte de dialogue:

Some of the files created by the installation are inside the build 
directory: /path/to/myproject-build 

You probably don't want them to be included in the package, 
especially if they are inside your home directory. 
Do you want me to list them? [n]: y 
Should I exclude them from the package? (Saying yes is a good idea) [y]: n 

... Je doit, en fait, répondre n - sinon je ne reçois rien compris! Je peux alors vérifier le contenu avec:

dpkg --contents mytest.deb | less 

Cependant, le problème est que checkinstall:

  • également comprend .o fichiers, ainsi que .svn répertoires
  • compte le chemin absolu relative (ne sera pas automatiquement "envoyer" des exécutables à dire, /usr/bin, et .so s à /usr/lib

 

En bref - quelques-unes des approches ci-dessus peuvent obtenir un avoir un .deb qui est pas complètement vide; mais cela ne signifie pas que l'on n'a que les fichiers nécessaires, ou qu'ils seront routés vers les destinations d'installation habituelles ...

Eh bien, espérons que cela aide au moins un peu,
Cheers!

1

J'ai eu des problèmes similaires. À la fin j'ai suivi this approche très simple, mais assez manuelle.

Placez les fichiers que vous souhaitez empaqueter dans debian/usr/bin par exemple. Il n'est pas nécessaire de compléter les étapes habituelles configure, make, make install.

5

La double utilisation de sudo est le problème.

Lors de l'installation d'un fichier.sh comme

#! /bin/bash 
set -x 
touch useless 
cp useless /usr/share/useless 

commande

sudo checkinstall --pkgname useless -y ./install.sh 

travaux tout en

sudo checkinstall --pkgname useless -y sudo ./install.sh 
             ^^^^ 

Expositions L'

cp: cannot stat ‘//var/tmp/tmp.Au4ympTNlT/newfiles.tmp’: No such file or directory 

et produit un paquet vide.