blob: a581f1f3066e087ff3e95775fc286c840af9a164 [file] [log] [blame]
# This PKGBUILD requires root at the package stage. Building works as user, afterwards
# to fetch source use fetch-src <release-version> to do a shallow clone from Git.
# use makepkg -sdd as root to build
#
pkgname=('freebsd-world' 'freebsd-kernel' 'freebsd-source' 'freebsd-init' 'freebsd-boot')
if [[ "$CARCH" == "amd64" ]]; then
pkgname=(${pkgname[@]} 'freebsd-lib32')
fi
_freebsdver=11.1-RELEASE
_libarchivever=3.2.2
pkgver=11.1
pkgrel=5
arch=('amd64')
url="https://www.freebsd.org"
license=('BSD')
options=('!strip' 'emptydirs' '!fbsd10fix' 'staticlibs')
makedepends=('git')
#patchdir="${srcdir}/usr/src"
patchdir="${srcdir}/freebsd"
## The commit should currently come from the stable/11 branch
source=("src.txz"
'PACBSD_i386'
'PACBSD_amd64'
'libcrypto.pc.in'
'libarchive.pc'
'openssl.pc.in'
'tmpfiles.in')
sha256sums=('fed0bb60c6e8c2d1753ae87e3c4ae39db566ca9fc0d9034b0f37142fcb4b184d'
'd55fc2516152088683b997b3817c027f704f51ffe63669b45706cc1bb1a78a5f'
'ffb934cb84118fedc2412a101b8d6120e478d8ae0bddc259394e9e166c3a8d97'
'588ca995bf3993cb204ae5120000dca959b95ed01241e04add374e0bf9ea95b3'
'd7330acf6cde09bfd54cf6590d4e989c5a2abb49e0d3209f2f242af8012384b5'
'4a64e9d0e5222c1550324ddbdda3b51747e8f9b1487b148598c795e5d6b764f5'
'13db30e5683f1f18cef82c737ea84c47fb163f4ea8efb554d75be99bc0c6e1c7')
prepare() {
cd "${srcdir}/freebsd"
#Remove the horrible dir string in uname
sed -i '' -e 's/:\${d}//g' "${srcdir}/freebsd/sys/conf/newvers.sh"
#Remove debug options from generic
sed -i '' -e '/DEBUG=/d' "${srcdir}/freebsd/sys/amd64/conf/GENERIC"
cd "${srcdir}"
msg "Fetching version info for .pc files"
local openssl_version=$(grep -m1 '^VERSION=' freebsd/crypto/openssl/Makefile \
| sed -e 's/^VERSION=[[:space:]]*//')
msg "openssl: ${openssl_version}"
sed -e "s|%%VERSION%%|${openssl_version}|g" openssl.pc.in > openssl.pc
# libcrypto and openssl share their version
msg "libcrypto: ${openssl_version}"
sed -e "s|%%VERSION%%|${openssl_version}|g" libcrypto.pc.in > libcrypto.pc
# libarchive only has it in a #define, I wonder if it'll stay that way
# in the sources
}
flags_for_all() {
cd "$srcdir"
export MAKEOBJDIRPREFIX="$srcdir/obj"
unset LDFLAGS CXXFLAGS CPPFLAGS CFLAGS M4 LD RANLIB ld
if [[ "$CARCH" == "amd64" ]]; then
export TARGET=amd64
export KERNCONF=PACBSD_amd64
export CFLAGS="-march=x86-64 -mtune=generic -O2"
else
export TARGET=i386
export KERNCONF=PACBSD_i386
export CFLAGS="-march=i686 -mtune=generic -O2"
fi
# building the default parameters here:
bsdmakeflags=(
KERNCONF="${KERNCONF}"
NO_FSCHG=1
)
}
_build() {
cd "${srcdir}/freebsd"
msg "Linking kernel config"
ln -sf "${srcdir}/$KERNCONF" "${srcdir}/freebsd/sys/${TARGET}/conf/$KERNCONF"
msg "Building Kernel toolchain"
make WERROR= NO_WERROR= "${bsdmakeflags[@]}" kernel-toolchain || (echo kernel-toolchain failed... && return 1)
msg "Building Kernel"
make WERROR= NO_WERROR= "${bsdmakeflags[@]}" buildkernel || (echo buildkernel failed... && return 1)
msg "Building world"
make WERROR= NO_WERROR= "${bsdmakeflags[@]}" buildworld || (echo buildworld failed... && return 1)
}
_package_freebsd-kernel() {
pkgdesc="FreeBSD kernel package ${_git_desc}"
groups=('base')
options=('!strip')
cd "${srcdir}/freebsd"
make -j4 "${bsdmakeflags[@]}" DESTDIR="${pkgdir}" installkernel || (echo installkernel failed... && return 1)
}
_package_freebsd-world() {
pkgdesc="FreeBSD base package ${_git_desc}"
groups=('base')
depends=('init' 'freebsd-kernel')
conflicts=(libexecinfo libarchive)
provides=(libc=${_freebsdver} zlib=${_freebsdver} libexecinfo libarchive=${_libarchivever} sh)
cd "${srcdir}/freebsd"
msg "Running make installworld distribution..."
make -j4 "${bsdmakeflags[@]}" DESTDIR="$pkgdir" -DWITHOUT_LIB32 installworld distribution
msg "Installed. Cleaning up and configuring..."
#remove rc tools for openrc
rm -r ${pkgdir}/etc/rc.d*
rm ${pkgdir}/etc/{rc,rc.shutdown} \
${pkgdir}/usr/share/man/man8/rc.8.gz
#remove rc.conf in defaults provided by FreeBSD-Configs
rm "${pkgdir}"/etc/defaults/rc.conf \
"${pkgdir}"/etc/rc.subr
#Remove freebsd-update
rm "${pkgdir}"/usr/sbin/freebsd-update \
"${pkgdir}"/usr/share/man/man1/cpp.1.gz
#Remove files now proveded by FreeBSD-boot
mv "${pkgdir}/boot" "${srcdir}/freebsd/" # a bit backwards but should work
#Remove files now provided by FreeBSD-config
rm "${pkgdir}"/etc/freebsd-update.conf \
"${pkgdir}"/etc/netstart \
"${pkgdir}"/etc/devd/asus.conf \
"${pkgdir}"/etc/csh.cshrc \
"${pkgdir}"/etc/devd.conf \
"${pkgdir}"/etc/devfs.conf \
"${pkgdir}"/etc/motd \
"${pkgdir}"/etc/profile \
"${pkgdir}"/etc/sysctl.conf \
"${pkgdir}"/etc/devd/uath.conf \
"${pkgdir}"/etc/devd/usb.conf
#FIXME: remove /rescue as this throws of libarchives size calculations.
rm -rf "${pkgdir}/rescue"
rm -rf "${pkgdir}/usr/tests"
#set var/cache to 755
chmod -Rv 755 "${pkgdir}"/var/cache
# FIXME: /var/db/entropy seems to have changed from 700 to 755
# if keeping it 700 doesn't break anything, fix it up to 700 again!
chmod -Rv 700 "${pkgdir}"/var/db/entropy
cd "$pkgdir"
backup=('boot/device.hints')
for f in `find -E etc -type f ! -regex ".*periodic.*|.*mtree.*|.*defaults.*|.*README|.*Makefile"` `find root var -type f`; do
backup+=("${f}")
done
if [[ "$CARCH" == "amd64" ]]; then
msg "Fixing up 32/64 bit include files"
# Move machine headers to a 64/ directory and create wrappers
mv "$pkgdir"/usr/include/machine "$srcdir"/machine64
install -o root -g wheel -dm755 "$pkgdir"/usr/include/machine
mv "$srcdir"/machine64 "$pkgdir"/usr/include/machine/64
# Install 32 bit machine headers to /usr/include/machine/32
cp -R "$srcdir"/freebsd/sys/i386/include "$pkgdir"/usr/include/machine/32
cd "$pkgdir"/usr/include/machine
install -o root -g wheel -dm755 pc
for i in 64/pc/*; do
b=${i#64/pc/}
cat > "pc/$b" <<EOF
#if __x86_64
# include <machine/64/pc/$b>
#else
# include <machine/32/pc/$b>
#endif
EOF
done
for i in 64/*; do
b=${i#64/}
if [ "$b" = "pc" ]; then continue; fi
if [ -e "32/$b" ]; then
cat > "$b" <<EOF
#if __x86_64
# include <machine/64/$b>
#else
# include <machine/32/$b>
#endif
EOF
else
cat > "$b" <<EOF
#if __x86_64
# include <machine/64/$b>
#else
# error "No such 32-bit include: <machine/32/$b>"
#endif
EOF
fi
done
for i in 32/*; do
if [ "$b" = "pc" ]; then continue; fi
b=${i#32/}
if [ ! -e "$b" ]; then
cat > "$b" <<EOF
#if __x86_64
# error "No such 64-bit include: <machine/64/$b>"
#else
# include <machine/32/$b>
#endif
EOF
fi
done
fi
install -o root -g wheel -dm755 "${pkgdir}/usr/libdata/ldconfig"
echo "/lib" > "${pkgdir}/usr/libdata/ldconfig/lib"
echo "/usr/lib" >> "${pkgdir}/usr/libdata/ldconfig/lib"
echo "/usr/local/lib" >> "${pkgdir}/usr/libdata/ldconfig/lib"
#Install libcrypto pc file
install -o root -g wheel -m655 "${srcdir}/libcrypto.pc" "${pkgdir}/usr/libdata/pkgconfig/"
install -o root -g wheel -m655 "${srcdir}/libarchive.pc" "${pkgdir}/usr/libdata/pkgconfig/"
install -o root -g wheel -m655 "${srcdir}/openssl.pc" "${pkgdir}/usr/libdata/pkgconfig/"
#Setup console log
msg "Setting up console.log"
touch console.log
install -o root -g wheel -m600 console.log ${pkgdir}/var/log/
mv ${pkgdir}/sbin/reboot ${pkgdir}/sbin/reboot_
echo "#!/bin/sh" > ${pkgdir}/sbin/reboot
echo "shutdown -r now" >> ${pkgdir}/sbin/reboot
chmod +x ${pkgdir}/sbin/reboot
mv ${pkgdir}/usr/share/man/man8/reboot.8.gz ${pkgdir}/usr/share/man/man8/reboot_.8.gz
#Prevent some log warnings
install -o root -g wheel -dm755 ${pkgdir}/var/at/jobs/
install -o root -g wheel -dm755 ${pkgdir}/var/db/entropy
rm -rf ${pkgdir}/usr/lib32
# set default pager to less
sed -i '' -e 's|PAGER=more|PAGER=less|g' "${pkgdir}/root/.profile" "${pkgdir}/usr/share/skel/dot.profile"
}
_package_freebsd-boot() {
pkgdesc="FreeBSD boot files from"
groups=('base')
options=('!strip')
cd "${srcdir}/freebsd"
mkdir -p "${pkgdir}/boot"
cp -r "${srcdir}/freebsd/boot" "${pkgdir}/"
#Remove files now provided by FreeBSD-config
rm "${pkgdir}"/boot/beastie.4th \
"${pkgdir}"/boot/brand.4th
}
_package_freebsd-source() {
pkgdesc="FreeBSD source matching FreeBSD kernel ${_git_desc}"
options=('!strip')
arch=('any')
cd "${srcdir}/freebsd"
mkdir -p "${pkgdir}/usr/src"
cp -r "${srcdir}/freebsd"/* "${pkgdir}/usr/src/"
# The only place where -f is okay - the above doesn't usually include
# dot-files, but w/e...
rm -rf "${pkgdir}"/usr/src/.git
}
if [[ "$CARCH" == "amd64" ]]; then
_package_freebsd-lib32() {
pkgdesc="FreeBSD lib32 libraries ${_git_desc}"
provides=("lib32-libc=${_freebsdver}")
options=('!strip' 'staticlibs')
arch=('amd64')
install=lib32.install
conflicts=(lib32-libexecinfo lib32-libarchive)
provides=(lib32-libc=${_freebsdver} lib32-zlib=${_freebsdver} lib32-libexecinfo lib32-openssl lib32-libarchive=${_libarchivever})
cd "${srcdir}/freebsd"
install -o root -g wheel -dm755 "${pkgdir}"/usr/{lib32,libexec,bin}
install -o root -g wheel -dm755 "${pkgdir}"/usr/lib32/{i18n,private,dtrace}
install -o root -g wheel -dm755 "${pkgdir}"/{lib,libexec}/
install -o root -g wheel -dm755 "${pkgdir}"/usr/libdata/pkgconfig
make -j4 "${bsdmakeflags[@]}" DESTDIR="$pkgdir" install32
rm -r "${pkgdir}/usr/libdata/pkgconfig"
}
fi
_package_freebsd-init() {
pkgdesc="FreeBSD init scripts ${_git_desc}"
depends=('tmpfiles')
provides=('init')
conflicts=('openrc')
options=('!strip')
arch=('amd64')
backup=("etc/rc.conf")
cd "${srcdir}/freebsd"
#remove rc tools for openrc
install -o root -g wheel -dm755 ${pkgdir}/etc/
cp -R "${srcdir}/freebsd/etc"/rc* ${pkgdir}/etc/
install -m755 ${srcdir}/tmpfiles.in ${pkgdir}/etc/rc.d/tmpfiles
#Files kept in world as needed by openrc also
rm "${pkgdir}"/etc/rc.{bsdextended,firewall,initdiskless,resume,sendmail,suspend}
}
build() {
flags_for_all
_build
}
for _p in ${pkgname[@]}; do
eval "package_${_p}() {
flags_for_all
_package_${_p}
}"
done