2013-03-18 16 views
7

Sono stato davvero bloccato su questo problema minore (sono sicuro) quindi qualsiasi aiuto sarebbe molto apprezzato. Ho creato un pacchetto di Ubuntu standard con dh_make. Lo scopo di questo pacchetto è creare un pacchetto che imposterà tutti i pacchetti relativi a ldap di cui un sistema ha bisogno, inclusa la sua configurazione. Uno dei passaggi che sto cercando di fare è copiare su un file /etc/ldap.conf mentre fai un backup del file esistente. Come faccio a fare questo? Ho provato a creare uno script postinst che assomiglia in sostanza a quanto segue, ma non sono chiaro su come il pacchetto memorizza i file e ricevo un errore che dice il file etc/ldap.conf mancante. Qual'è il miglior modo per farlo? Qui è il mio script postinst:Creazione pacchetto Debian - Come installare i file di configurazione?

#!/bin/bash -xv

install -v -b etc/ldap.conf /etc/ldap.conf > /tmp/tst 2>&1 

Qui è la mia struttura dello scheletro:

 
    [email protected]:~/navldapubuntu-0.1/debian# tree 


    ├── changelog 
    ├── compat 
    ├── control 
    ├── copyright 
    ├── docs 
    ├── etc 
    └── ldap.conf 
    ├── install 
    ├── postinst 
    ├── README.Debian 
    ├── README.source 
    ├── rules 
    ├── source 
    └── format 
    ├── navldapubuntu 
    └── etc 
    ├── navldapubuntu.debhelper.log 
    ├── navldapubuntu.dirs 
    └── navldapubuntu.doc-base.EX 

Ecco alcune informazioni aggiuntive del pacchetto che ho creato.

 
    dpkg --contents tnoldapubuntu_0.1-1_all.deb (truncated output) 
    ./usr/ 
    ./usr/share/ 
    ./usr/share/doc
./usr/share/doc/navldapubuntu/ ./usr/share/doc/navldapubuntu/copyright ./usr/share/doc/navldapubuntu/README.Debian ./usr/share/doc/navldapubuntu/changelog.Debian.gz ./etc/ldap.conf

+0

backup in postinst? forse in preinst? controllare file esiste: 'if [-f /etc/ldap.conf] poi cp /etc/ldap.conf /etc/ldap.conf.dist fi', giusto? – mkjasinski

+0

Il problema non è nella logica del cp. Il problema è che l'origine /etc/ldap.conf non esiste. Come posso includerlo nel pacchetto in modo che il mio script postinstall veda il file /etc/ldap.conf? Ottengo un errore nel mio script, ora che afferma qualcosa di simile: l'installazione: non può stat '/navldap-0.1/debian/etc/ldap.conf ': Nessun file o direttore – user2175757

+0

stranamente, non hanno un file in'/ecc. e lanciando un errore che non ce l'hai in una directory diversa? lo script non può eseguire 'stat' su file nel pacchetto, da quale directory si esegue l'installazione? – mkjasinski

risposta

3

È necessario creare un file "conffiles" nella directory DEBIAN, accanto al file "control" e dichiarare /etc/ldap.conf in esso. Quindi questo file verrà automaticamente considerato un file di configurazione, e le modifiche ad esso richiederanno un "nuovo file di configurazione, vorresti sovrascrivere, yadda yadda".

+0

Grazie mille. Ora sto riscontrando un errore durante la creazione dopo aver creato il file conffiles con /etc/ldap.conf in esso. Inoltre, può essere passato un flag per creare un file di backup di /etc/ldap.conf? : dpkg-deb --build debian/navldapubuntu .. dpkg-deb: errore: conffile '/etc/ldap.conf 'non appare nel pacchetto dh_builddeb: dpkg-deb --build debian/tnoldapubuntu .. codice di ritorno restituito 2 – user2175757

+0

In realtà, il file conffiles sembra che conserva solo il file. Sto cercando di avere il pacchetto include una versione del file ldap.conf che installa quando eseguo l'installazione di apt-get. Ad esempio: (1) Costruire pacchetto con file di ldap.conf personalizzata (2) apt-get install "nome del pacchetto" e questa ldap.conf personalizzato otterrà installato. Spero che questo abbia un senso? – user2175757

+0

ha un senso, così si dovrebbe includere /etc/ldap.conf nel pacchetto. Cosa succede se lo fai? – wazoox

7

C'è uno strumento speciale che ha progettato per la creazione di pacchetti di configurazione: http://debathena.mit.edu/config-packages

Ecco un semplice modello che potrebbe essere utile per un rapido avvio.

Elenco dei file

  • modello (directory)
  • template/debian (directory)
  • template/debian/control
  • template/debian/changelog
  • template/debian/Displace
  • modello/debian/regole
  • modello/debian/postinst
  • template/debian/install
  • template/debian/docs
  • template/debian/compat
  • template/README
  • template/COSTRUIRE
  • template/file (directory)
  • template/file/etc/ldap.conf.MyCompanyName

Content

template/debian/control:

Source: PACKAGE_NAME 
Section: morpho/misc 
Priority: optional 
Maintainer: MAINTAINER 
Build-Depends: debhelper, config-package-dev (>= 5.0~) 

Package: PACKAGE_NAME 
Architecture: all 
Depends: ${misc:Depends}, DEPENDENCY [, DEPENDENCY ...] 
Provides: ${diverted-files} 
Conflicts: ${diverted-files} 
Description: PACKAGE_DESCRIPTION_SHORT 
PACKAGE_DESCRIPTION_LONG. 

template/debian/spostarla in

/etc/ldap/ldap.conf.mycompanyname 

template/debian/install

files/*/

template/debian/postinst

#!/bin/sh 
set -e 
#DEBHELPER# 

POSTINST_SCRIPT 

template/debian/rules

#!/usr/bin/make -f 

# Exclude *.svn* from building 
# you probably don't need this if don't use SVN 
export DH_ALWAYS_EXCLUDE=.svn 

# Core (check http://debathena.mit.edu/config-packages for more information) 
%: 
     dh [email protected] --with=config-package 

# Prevent dh_installdeb of treating files in /etc as configuration files 
# you need this if need configuration files been always rewritten 
# even if changed 
override_dh_installdeb: 
     dh_installdeb 
     rm debian/*/DEBIAN/conffiles 

template/debian/docs

README 
BUILD 

E infine si può costruire questo pacchetto con il seguente comando:

dpkg-buildpackage -us -uc -I.svn 
+0

Grazie per aver fornito un esempio completo, questo è esattamente quello che stavo cercando! – Magnus

+0

Ho trovato che il suffisso del file spostato "mycompanyname" deve essere il prefisso del nome del pacchetto (ad esempio "mycompanyname-ldap-config") con 'config-package-dev' 5.1.2 – Lucas

Problemi correlati