summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testing/zfs-git-grsec/APKBUILD100
-rw-r--r--testing/zfs-git-grsec/timestamp.patch16
-rw-r--r--testing/zfs-git-grsec/vdev_id_posix.patch103
3 files changed, 219 insertions, 0 deletions
diff --git a/testing/zfs-git-grsec/APKBUILD b/testing/zfs-git-grsec/APKBUILD
new file mode 100644
index 000000000..d5a5dd7ea
--- /dev/null
+++ b/testing/zfs-git-grsec/APKBUILD
@@ -0,0 +1,100 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer:
+
+_flavor=${FLAVOR:-grsec}
+_realname=zfs-git
+_name=$_realname-$_flavor
+
+_kpkg=linux-$_flavor
+_kver=3.6.6
+_kpkgrel=1
+
+_mypkgrel=0
+_date=$(date +%Y%m%d)
+
+# source the kernel version
+if [ -f ../../main/linux-$_flavor/APKBUILD ]; then
+ . ../../main/linux-$_flavor/APKBUILD
+ [ "$_kver" != "$pkgver" ] && die "$_name: Please update _kver to $pkgver"
+ [ "$_kpkgrel" != "$pkgrel" ] && die "$_name: Please update _kpkgrel to $pkgrel"
+fi
+
+_kernelver=$_kver-r$_kpkgrel
+_abi_release=$_kver-${_flavor}
+
+pkgname=$_name
+pkgver=$_kver
+pkgrel=$(($_kpkgrel + $_mypkgrel))
+pkgdesc="ZFS for Linux"
+url="http://zfsonlinux.org"
+arch="all"
+license="CDDL"
+depends="spl-git-$_flavor"
+depends_dev="glib-dev e2fsprogs-dev util-linux-dev
+ linux-$_flavor-dev spl-git-$_flavor-dev"
+makedepends="$depends_dev automake autoconf libtool"
+install=""
+subpackages="$pkgname-dev $pkgname-doc $_realname-utils:utils"
+source="saveas-https://github.com/zfsonlinux/zfs/archive/master.tar.gz/zfs-git-$_date.tar.gz
+ timestamp.patch
+ vdev_id_posix.patch"
+
+_builddir="$srcdir"/zfs-master
+
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir"
+ ./autogen.sh || return 1
+ export LIBS="$LIBS -lintl"
+ export GCC_SPECS=/usr/share/gcc/hardenednopie.specs
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --with-config=all \
+ --with-udevdir=/lib/udev \
+ || return 1
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+ rm -f "$pkgdir"/usr/lib/*.la
+ rm -rf "$pkgdir"/usr/libexec
+ rm -rf "$pkgdir"/usr/share/dracut
+}
+
+dev() {
+ mkdir -p "$subpkgdir"/usr
+ mv "$pkgdir"/usr/src \
+ "$subpkgdir"/usr || return 1
+ default_dev
+}
+
+utils() {
+ pkgdesc="Userland tools to manage zfs on linux"
+ depends="$depends bash"
+ mkdir -p "$subpkgdir"
+ mv "$pkgdir"/* "$subpkgdir" || return 1
+ mkdir -p "$pkgdir"/lib
+ mv "$subpkgdir"/lib/modules \
+ "$pkgdir"/lib || return 1
+ rm -f "$subpkgdir"/etc/init.d/zfs
+ install -m755 -D "$_builddir"/etc/init.d/zfs.gentoo.in \
+ "$subpkgdir"/etc/init.d/zfs
+}
+
+md5sums="78652d6a0ea05fa3476d0e1c577dbb98 zfs-git-20121108.tar.gz
+9621735b802e34d792b03ef89727f6ea timestamp.patch
+c9a5307dc254ff4ff4808a178f4d8bd6 vdev_id_posix.patch"
diff --git a/testing/zfs-git-grsec/timestamp.patch b/testing/zfs-git-grsec/timestamp.patch
new file mode 100644
index 000000000..68a612faa
--- /dev/null
+++ b/testing/zfs-git-grsec/timestamp.patch
@@ -0,0 +1,16 @@
+uclibc does not support _DATE_FMT, it seems to be a libc only thing
+not sure this will work, will need to take a closer look.
+http://pubs.opengroup.org/onlinepubs/007904975/basedefs/langinfo.h.html
+http://sources.redhat.com/ml/libc-alpha/2000-10/msg00298.html
+
+--- ./lib/libspl/timestamp.c.orig
++++ ./lib/libspl/timestamp.c
+@@ -40,7 +40,7 @@
+
+ /* We only need to retrieve this once per invocation */
+ if (fmt == NULL)
+- fmt = nl_langinfo(_DATE_FMT);
++ fmt = nl_langinfo(D_FMT);
+
+ if (timestamp_fmt == UDATE) {
+ (void) printf("%ld\n", t);
diff --git a/testing/zfs-git-grsec/vdev_id_posix.patch b/testing/zfs-git-grsec/vdev_id_posix.patch
new file mode 100644
index 000000000..8f44d039c
--- /dev/null
+++ b/testing/zfs-git-grsec/vdev_id_posix.patch
@@ -0,0 +1,103 @@
+From 8714d5292b09502b9f19a6f01f7d5fac99e9759c Mon Sep 17 00:00:00 2001
+From: Ned Bass <bass6@llnl.gov>
+Date: Wed, 19 Sep 2012 11:44:12 -0700
+Subject: [PATCH] Make vdev_id POSIX sh compatible
+
+Full bash may not be available in all environments where udev helpers
+run, such as in an initial ramdisk. To avoid breakage in this case,
+remove use of bash-specific features such as variable arrays and the
+`declare' keyword from the vdev_id script.
+
+Closes #870
+Signed-off-by: Ned Bass <bass6@llnl.gov>
+---
+ cmd/vdev_id/vdev_id | 33 ++++++++++++++++++++-------------
+ 1 file changed, 20 insertions(+), 13 deletions(-)
+
+diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id
+index d278197..55af515 100755
+--- a/cmd/vdev_id/vdev_id
++++ b/cmd/vdev_id/vdev_id
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # vdev_id: udev helper to generate user-friendly names for JBOD disks
+ #
+@@ -80,7 +80,6 @@ SLOT_MAP=
+ CHANNEL_MAP=
+ MULTIPATH=
+ TOPOLOGY=
+-declare -i i j
+
+ usage() {
+ cat << EOF
+@@ -229,32 +228,39 @@ else
+ sys_path=`udevadm info -q path -p /sys/block/$DEV 2>/dev/null`
+ fi
+
+-dirs=(`echo "$sys_path" | tr / ' '`)
++# Use positional parameters as an ad-hoc array
++set -- $(echo "$sys_path" | tr / ' ')
++num_dirs=$#
+ scsi_host_dir="/sys"
+
+ # Get path up to /sys/.../hostX
+-for (( i=0; i<${#dirs[*]}; i++ )); do
+- d=${dirs[$i]}
++i=1
++while [ $i -le $num_dirs ] ; do
++ d=$(eval echo \$$i)
+ scsi_host_dir="$scsi_host_dir/$d"
+ echo $d | egrep -q -e '^host[0-9]+$' && break
++ i=$(($i + 1))
+ done
+
+-if [ $i = ${#dirs[*]} ] ; then
++if [ $i = $num_dirs ] ; then
+ exit 0
+ fi
+
+-PCI_ID=`echo ${dirs[$(( $i - 1 ))]} | awk -F: '{print $2":"$3}'`
++PCI_ID=$(eval echo \$$(($i -1)) | awk -F: '{print $2":"$3}')
+
+-# In sas_switch mode, the directory three levels beneath /sys/.../hostX
++# In sas_switch mode, the directory four levels beneath /sys/.../hostX
+ # contains symlinks to phy devices that reveal the switch port number. In
+ # sas_direct mode, the phy links one directory down reveal the HBA port.
+ port_dir=$scsi_host_dir
+ case $TOPOLOGY in
+- "sas_switch") j=$(($i+4)) ;;
++ "sas_switch") j=$(($i + 4)) ;;
+ "sas_direct") j=$(($i + 1)) ;;
+ esac
+-for (( i++; i<=$j; i++ )); do
+- port_dir="$port_dir/${dirs[$i]}"
++
++i=$(($i + 1))
++while [ $i -le $j ] ; do
++ port_dir="$port_dir/$(eval echo \$$i)"
++ i=$(($i + 1))
+ done
+
+ PHY=`ls -d $port_dir/phy* 2>/dev/null | head -1 | awk -F: '{print $NF}'`
+@@ -266,13 +272,14 @@ PORT=$(( $PHY / $PHYS_PER_PORT ))
+ # Look in /sys/.../sas_device/end_device-X for the bay_identifier
+ # attribute.
+ end_device_dir=$port_dir
+-for (( ; i<${#dirs[*]} ; i++ )); do
+- d=${dirs[$i]}
++while [ $i -lt $num_dirs ] ; do
++ d=$(eval echo \$$i)
+ end_device_dir="$end_device_dir/$d"
+ if echo $d | egrep -q -e '^end_device' ; then
+ end_device_dir="$end_device_dir/sas_device/$d"
+ break
+ fi
++ i=$(($i + 1))
+ done
+
+ SLOT=`cat $end_device_dir/bay_identifier 2>/dev/null`
+--
+1.7.10
+