| Function | src_install |
| Purpose | Install a package image to ${D} |
| Sandbox | Enabled |
| Privilege | root |
| Called for | ebuild |
src_install()
{
return
}
src_install() {
make DESTDIR="${D}" install || die "Install failed!"
dodoc README CHANGES
}
Spesso, specialmente con pacchetti che utilizzano autotools, c'è una indicazione, in Makefile, su dove installare il pacchetto che costituirà in seguito il valore della variabile DESTDIR per installare il pacchetto in una locazione non-root. Se possibile dovrebbe essere utilizzata la seguente forma:
make DESTDIR="${D}" install || die "Install failed"
Nota
In questo caso make dovrebbe essere usato al posto di emake. Molte installazioni non sono progettate per essere parallelizzate.
In alcuni casi questo porterà ad avere qualche cosa di installato in locazioni strane. Se e solo se ci si imbatte in un caso simile, può essere utilizzata la funzione einstall:
einstall || die "Install failed!"
In questi casi è di solito necessario includere istruzioni dodoc aggiuntive per i file README, ChangeLog, etc.
Per alcuni pacchetti che non hanno Makefile e dei quali si deve installare solo un piccolo numero di file, scrivere un'installazione manuale usando cp è l'opzione più semplice. Per esempio, per installare semplicemente dei temi (che non richiedono una compilazione):
dodir /usr/share/foo-styles/
cp -R ${S}/ ${D}/ || die "Install failed!"
Oppure utilizzando una combinazione di insinto e doins (si vedano le ulteriori funzioni correlate nella guida di riferimento alle funzioni di installazione). Il seguente esempio è tratto dall'installazione di sys-fs/udev:
src_install() {
dobin udevinfo
dobin udevtest
into /
dosbin udev
dosbin udevd
dosbin udevsend
dosbin udevstart
dosbin extras/scsi_id/scsi_id
dosbin extras/volume_id/udev_volume_id
exeinto /etc/udev/scripts
doexe extras/ide-devfs.sh
doexe extras/scsi-devfs.sh
doexe extras/cdsymlinks.sh
doexe extras/dvb.sh
insinto /etc/udev
newins ${FILESDIR}/udev.conf.post_050 udev.conf
doins extras/cdsymlinks.conf
# For devfs style layout
insinto /etc/udev/rules.d/
newins etc/udev/gentoo/udev.rules 50-udev.rules
# scsi_id configuration
insinto /etc
doins extras/scsi_id/scsi_id.config
# set up symlinks in /etc/hotplug.d/default
dodir /etc/hotplug.d/default
dosym ../../../sbin/udevsend /etc/hotplug.d/default/10-udev.hotplug
# set up the /etc/dev.d directory tree
dodir /etc/dev.d/default
dodir /etc/dev.d/net
exeinto /etc/dev.d/net
doexe etc/dev.d/net/hotplug.dev
doman *.8
doman extras/scsi_id/scsi_id.8
dodoc COPYING ChangeLog FAQ HOWTO-udev_for_dev README TODO
dodoc docs/{overview,udev-OLS2003.pdf,udev_vs_devfs,RFC-dev.d,libsysfs.txt}
dodoc docs/persistent_naming/* docs/writing_udev_rules/*
newdoc extras/volume_id/README README_volume_id
}
Questo, naturalmente, è considerevolmente più difficile da gestire di una semplice installazione tramite Makefile.
In qualche occasione ci possono essere Makefile che non non permettono di costruire la variabile DESTDIR e un certo numero di file da installare. In questi casi la scelta migliore è fare una patch per il Makefile e contattare gli sviluppatori spiegandone la ragione.