| # 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 |