src_install
函数 | src_install |
---|---|
用途 | 将软件包安装到 ${D} |
沙盒 | 启用 |
权限 | root |
调用时机 | ebuild |
默认 src_install
对于 EAPI 4 及更高版本,默认的 src_install
函数如下所示
src_install() {
if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]] ; then
emake DESTDIR="${D}" install
fi
if ! declare -p DOCS >/dev/null 2>&1 ; then
local d
for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS \
FAQ CREDITS CHANGELOG ; do
[[ -s "${d}" ]] && dodoc "${d}"
done
elif [[ $(declare -p DOCS) == "declare -a"* ]] ; then
dodoc "${DOCS[@]}"
else
dodoc ${DOCS}
fi
}
对于 EAPI 6 及更高版本,默认的 src_install
函数如下所示
src_install() {
if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]] ; then
emake DESTDIR="${D}" install
fi
einstalldocs
}
简单安装
通常,尤其是在使用 autotools 驱动的软件包时,会有一个 Makefile
install
目标,它将遵守 DESTDIR
变量以告知它安装到非根目录位置。如果可能,应该使用此方法。
emake DESTDIR="${D}" install
注意: 这里应该使用
emake
来进行并行化。有些安装并非设计为并行化,如果遇到错误,请使用 emake -j1
或 make
。通常,软件包的构建系统不会安装 README
、ChangeLog
等文件,因此需要为它们包含额外的 dodoc
语句。
emake DESTDIR="${D}" install
dodoc README CHANGES
dodoc -r doc
dodoc
支持 -r
作为第一个参数,这允许递归安装目录。
注意: 无需
dodoc COPYING
!许可证属于存储库的 licenses/
目录。但是,有时您可能希望无论如何都安装 COPYING
,例如,如果它解释了如何将不同的许可证应用于应用程序的不同部分。基本安装
对于一些没有 Makefile
且仅安装少量文件的软件包,使用 cp
手动安装是最简单的选择。例如,要简单安装一些(无需编译)主题
dodir /usr/share/foo-styles/
cp -R "${S}/" "${D}/" || die "Install failed!"
或者有时 insinto
和 doins
(以及相关函数 - 请参阅 安装函数参考)的组合 - 以下内容基于 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 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
}
当然,这比简单的 Makefile
驱动的安装要难处理得多。