2010-07-09 21 views
26

J'ai un grand projet où nous avons les fichiers suivants:je besoin de mon fichier de règles Debian simplement copier des fichiers vers sa cible

  • Quelques 3ème partie pré-compilés binaires
  • Notre propre maison binaires
  • Une collection de scripts Ruby
  • Ruby importante sur le projet Rails

Ce produit sera installé sur le matériel de l'appareil que mon l'employeur a déjà choisi, en utilisant Ubuntu Linux (Lucid) comme cible O.S., avec notre objectif de distribuer l'archive en tant que paquet Debian pour faciliter l'installation et les mises à jour. De plus, nous avons un certain nombre de modèles ERB que nous devons "remplir" avec des valeurs appropriées pour chaque client, donc l'utilisation du script postinst sera particulièrement utile pour nos besoins. En parallèle, les paquets Debian seront stockés sur un référentiel serveur que nous gérons en interne. A ce stade, j'ai utilisé dh_make pour créer le répertoire debian et les fichiers associés (par exemple, les règles, le contrôle, etc.), mais le fichier de règles qui est généré semble être excessif pour mes besoins.

Sur la base de cette description, tout ce que je vraiment besoin du fichier « règles » à faire est simplement copier des fichiers à partir d'un répertoire source (ou dans une archive) dans les répertoires cibles ci-dessous:

  • /opt/company_product/3rd_party_binaries/bin
  • /opt/company_product/3rd_party_binaries/etc
  • /opt/company_product/in_hourse_binaries/bin
  • /opt/company_product/in_hourse_binaries/etc
  • /opt/company_product/ruby ​​
  • /opt/company_product/rails_project
  • /opt/company_product/etc
  • /opt/company_product/shared/logs
  • /opt/company_product/shared/tmp
  • /opt/company_product/shared/license
  • ... Et ainsi de suite.

J'ai lu la Charte Debian et plusieurs How-To qui indiquent que vous ne devriez pas modifier le fichier de règles à utiliser mkdir pour créer des répertoires et il y a généralement un dh_ application (par exemple , dh_installdirs, et.al.) qui peuvent convenir à vos besoins pour presque toutes les applications. Les pages de manuel pour ces dh_ applications connexes sont superficielles au mieux, et je suis un type "type" de gars. Cela dit, je suis un peu perdu sur ce que la meilleure approche est d'obtenir mon règles fichier pour installer mes différents fichiers binaires pré-compilés et les fichiers texte Ruby/Rails aux endroits souhaités.

Voici mon premier fichier . C'est à peu près un fichier de règles standards standard que dh_make crée. Mon idée est que je devrais commenter toutes les sections à l'exception de la installer puis trouver les commandes appropriées pour créer des répertoires, copier des fichiers, etc. dans cette section.

Des conseils ou des suggestions sont grandement appréciés.

 
#!/usr/bin/make -f 

package = testapp 

CC = gcc 
CFLAGS = -g -Wall 

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) 
    CFLAGS += -O2 
endif 

#export DH_VERBOSE=1 

clean: 
     dh_testdir 
     dh_clean 
     rm -f build 

install: build 
     dh_clean 
     dh_installdirs 
     echo "Place the Install Script here" 
     cp $(CURDIR)/testapp-2.0.tar.gz $(CURDIR)/debian/$(package)/opt/testapp-2.0 
     echo "Finished copying folders" 


build: 
     touch build 

binary-indep: install 
# There are no architecture-independent files to be uploaded 
# generated by this package. If there were any they would be 
# made here. 

binary-arch: install 
     dh_testdir -a 
     dh_testroot -a 
     dh_installdocs -a 
     dh_installchangelogs -a 
     dh_strip -a 
     dh_compress -a 
     dh_fixperms -a 
     dh_installdeb -a 
     dh_shlibdeps -a 
     dh_gencontrol -a 
     dh_md5sums -a 
     dh_builddeb -a 

binary: binary-indep binary-arch 

.PHONY: binary binary-arch binary-indep clean checkroot 

Répondre

54

Bien que vous ayez déjà votre propre réponse, je signalerai quelques points.

Vous semblez faire ceci d'une manière très compliquée. S'il vous suffit de copier des fichiers dans certains répertoires, écrire un debian/mypackagename.install avec le format suivant: (. Ne pas préfixer / avant /usr ou /opt, ou quel que soit votre répertoire cible est lu man dh_install pour plus d'informations)

path/to/file/relative/to/source/root path/to/install/relative/to/system/root 

Ensuite, votre debian/rules peut être:

#!/usr/bin/make -f 

%: 
    dh [email protected] 

Si vous avez une sorte de makefile, etc dans votre racine source, puis ajoutez ceci au fichier rules ci-dessus:

override_dh_auto_build: 

override_dh_auto_install: 

N'oubliez pas mis 7 dans debian/compat.

En outre, vous ne devez pas installer des fichiers dans /opt/ ou /usr/local/, etc. Ceux-ci sont destinés à des fichiers pas installés par les paquets Debian. Debian recommande d'installer dans /usr/share/yourcompany/. Comme le montre juzzlin ci-dessous, le Centre logiciel Ubuntu peut avoir des exigences différentes.

Plus précisément, votre fichier mypackage.install devrait ressembler à ceci:

src/bin/* usr/bin 
src/etc/* etc/ 
+0

excellentes suggestions. Une fois que je fais cela, quelle commande devrais-je utiliser pour construire le paquet deb? –

+0

ok, j'ai couru dpkg-buildpackage et ai obtenu un fichier .deb, mais quand je l'installe sur le serveur cible il n'exécute pas mon fichier debian/mypackagename.install. Aussi, si j'ai des scripts qui vont sous init.d, où puis-je les mettre? –

+0

Voici ma structure de répertoires: build_deploy.rb build_package.rb debian docs extras Rakefile src test.txt. Sous src est le suivant: bin console created_vipre.sql etc filtre install.rb opt spf transport. Tout ce que je veux, c'est d'avoir un fichier .deb qui contient tout sous src. Je veux ensuite que cette structure exacte soit copiée dans/opt/vipre sur le système cible. Je veux alors que tout sous src/etc/init.d soit copié dans /etc/init.d. Je ne sais pas pourquoi je ne peux pas l'obtenir.Cela semble simple, mais les docs me confondent. S'il vous plaît aider. Merci beaucoup. –

-1

Vous pouvez installer cdbs et changer les règles dans le fichier comme ce

#!/usr/bin/make -f 

include /usr/share/cdbs/1/rules/debhelper.mk 

binary-install/package_name:: 
        mkdir debian/$(cdbs_curpkg)/destination_path 
        cp path_of_your_files debian/$(cdbs_curpkg)/destination_path