Latest entries
In this post I'll describe the changes made to the kernel and some of the Squeeze packages for the Freaky Wall.
The plan is to submit whishlist bugs to the BTS on the hope of having all what is needed for this project available on Debian after the Squeeze release, as my feeling is that a freeze is not the right time to push this changes... ;)
I'm giving access here to all the changes made to the source packages, but if anyone wants the binary packages (amd64 only) send me an email and I'll give you the URL of an apt repository that contains all the modified packages (it's the one at work, that contains other modified packages) or, if there is interest, I can put them on people.debian.org.
Kernel
To be able to build the firewall we need a kFreeBSD kernel with some options not compiled on the version distributed with Debian.
To compile the kernel I've followed the procedure described on the following debian-bsd mailing list post:
http://lists.debian.org/debian-bsd/2010/09/msg00023.html
Basically I've done the following:
apt-get build-dep kfreebsd-8
apt-get source kfreebsd-8
cd kfreebsd-8-8.1
cat >> debian/arch/amd64/amd64.config << EOF
# Add pflog, pfsync, ALTQ and CARP support
# ----------------------------------------
# http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html
device pf
device pflog
device pfsync
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build
# http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/carp.html
device carp
EOF
vi debian/changelog
dpkg-buildpackage -B -uc
Once the package was built I installed the new kernel package and rebooted the machine.
Utilities
To be able to use some utilities related to pf
I have built patched
versions of three packages:
freebsd-utils
: I have includedpflogd
andftp-proxy
on the package and have added some options to allow the use of additional interface types withifconfig
(carp
,pfsync
,lagg
,bridges
, ...).There were a lot of changes needed:
The
pflogd
andftp-proxy
Makefiles are missing from the original tarball, I modified theget-orig-source
of thedebian/rules
, but I build my packages against the original tarball, with the extra files included directly on the package .diff.gz.The
pflogd
daemon needs a_pflogd
user and group and a/var/run/_pflogd
directory, so I've added the directory and the creation of the user and group to the package post-install.The
ftp-proxy
daemon uses theproxy
user when dropping privileges and I've modified the code to make it use the/var/run/ftp-proxy
directory for the chroot.Some C header files that are not available on
-dev
packages were missing and I put them on the packages' debian directory. I've created adebian/include
directory and moved there the originaldebian/net
directory and added the headersdebian/include/net/if_bridgevar.h
anddebian/include/net/if_lagg.h
to add bridging support toifconfig
and thedebian/include/pcap-config.h
anddebian/include/pcap-int.h
libpcap private headers to be able to compile thepflogd
binary.
As I'm not familiar with the way people changes code for kFreeBSD some of the patches are a little bit dirty, but at least things work; besides, probably I should also have had to include init.d scripts for
pf
,pflogd
andftp-proxy
, but I have not done it at the package level yet, as what I got was enough to work with the tools.The debdiff against the
freebsd-utils-8.1-2
source package is available here or here.libpcap
: A test had to be removed in order to be able to supportpflog
on the library; the debdiff against thelibpcap-1.1.1-2
package is available here or here.tcpdump
: The package also had to be modified to include the code to print thepflogd
entries on thepcap
file; the debdiff againsttcpdump_4.1.1-1
is available here or here.
On the next post I'll describe how I've configured the system, the network interfaces and the different utilities patched and compiled on this post.
Posted Tue 30 Nov 2010 22:48:47 CETFor the Freaky Wall I have installed a Debian GNU/kFreeBSD system using the installer with ZFS support announced on:
http://robertmh.wordpress.com/2010/09/06/debian-installer-with-zfs/
I used the mini.iso
found on:
http://people.debian.org/~rmh/zfs/kfreebsd-amd64/monolithic/mini.iso
the 12th of October of 2010; as I had some problems and reported them to Robert is possible that the current image solves part of them.
Installation plan
I did a standard installation on a machine with two hard disks, but only used the first one from the installer.
The plan was to use ZFS with RAID-1, but current versions of grub
do not
support booting from a ZFS + RAID file system, so I had to use the same
technique used for Linux for a long time; three partitions: a swap partition,
a small /boot
partition and a big partition for /
; /
and /boot
were
formated to use ZFS.
First reboot
After the installation the system failed to boot because of a bug when
building the /boot/grub/grub.cfg
(some paths were missing a //@
prefix);
to be able to boot Iwe edited the config on the grub prompt and later fixed
the file:
--- grub.cfg.orig 2010-10-13 16:40:39.000000000 +0200
+++ grub.cfg 2010-10-13 18:38:47.535436766 +0200
@@ -64,7 +64,7 @@
set root='(hd0,1)'
search --no-floppy --fs-uuid --set a371979bb836d1fe
echo 'Loading kernel of FreeBSD 8.1-1-amd64 ...'
- kfreebsd /kfreebsd-8.1-1-amd64.gz
+ kfreebsd //@/kfreebsd-8.1-1-amd64.gz
insmod part_msdos
insmod zfs
set root='(hd0,3)'
@@ -75,7 +75,7 @@
insmod zfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set a371979bb836d1fe
- kfreebsd_module /zfs/zpool.cache type=/boot/zfs/zpool.cache
+ kfreebsd_module //@/zfs/zpool.cache type=/boot/zfs/zpool.cache
set kFreeBSD.vfs.root.mountfrom=zfs:dkfbf1-ad4s3
set kFreeBSD.vfs.root.mountfrom.options=rw
}
I haven't tested the installer since that day, but I believe that the current ZFS installer was fixed by Robert to deal with that problem.
Once the system was booted I had to fix a couple of things:
The keyboard configuration was wrong, but it was easy to fix the Debian Way:
dpkg-reconfigure kbdcontrol
The
/boot
partition was mounted on/target/boot
, as that was what was recorded on the ZFS file system; to fix it I executed the following commands:# zfs set mountpoint=/ dkfbf1-ad4s3 # zfs set mountpoint=/boot dkfbf1-ad4s1
Where
dkfbf1-ad4s3
is the root file system anddkfbf1-ad4s1
is the original/boot
.I reported that to Robert also and I believe it is fixed on the ZFS installer now.
Adjusting ZFS to do RAID-1
On the second disk I created the same partitions as the ones on the first disk
using parted
; the final result was:
# parted -l
Model: ST3250620NS/3BKS (ide)
Disk /dev/ad6: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 256MB 255MB primary
2 256MB 4256MB 4000MB primary
3 4256MB 250GB 246GB primary
Model: ST3250620NS/3BKS (ide)
Disk /dev/ad4: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 256MB 255MB primary
2 256MB 4256MB 4000MB primary linux-swap(v1)
3 4256MB 250GB 246GB primary
To use the second partition of both disks as swap I added the following to
/etc/fstab
:
/dev/ad4s2 none swap sw 0 0
/dev/ad6s2 none swap sw 0 0
To configure the mirroring for the root file system I did the following:
zpool attach dkfbf1-ad4s3 ad4s3 ad6s3
As the /boot
can't work as a replica I adjusted it to make two copies of
every file:
zfs set copies=2 dkfbf1-ad4s1
Leaving the second disk copy alone, although my plan is to configure it to
hold a copy of the /boot
partition synchronized with rsync
each night.
After all those changes the system didn't boot, as the grub-pc
generates a
buggy /boot/grub/grub.cfg
; the problem is on the /etc/grub.d/10_kfreebsd
section:
### BEGIN /etc/grub.d/10_kfreebsd ###
menuentry 'Debian GNU/kFreeBSD, with kFreeBSD 8.1-1-amd64' --class debian \
--class gnu-kfreebsd --class gnu --class os {
insmod part_msdos
insmod zfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set a371979bb836d1fe
echo 'Loading kernel of FreeBSD 8.1-1-amd64 ...'
kfreebsd /kfreebsd-8.1-1-amd64.gz
set kFreeBSD.vfs.root.mountfrom=unknown:/dev/ad4s3
set kFreeBSD.vfs.root.mountfrom.options=rw
}
### END /etc/grub.d/10_kfreebsd ###
To fix it there has to be a copy of the modules for ZFS on the boot partition
(in my case I moved the /lib/modules
directory to /boot
and created a
link on the root partition to the new directory):
cd /boot
mkdir lib
mv /lib/modules lib
cd /lib
ln -s ../boot/lib/modules
And instead of fixing the /etc/grub.d/10_kfreebsd
code I wrote a new
script (/etc/grub.d/09_zfs_kfreebsd
) that creates the right config for my
current configuration on the grub.cfg
file:
#!/bin/sh
prefix=/usr
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
. ${libdir}/grub/grub-mkconfig_lib
prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"
kfreebsd_versions="$(ls /lib/modules/)"
zfs_root_device="$(zfs list | awk '/\/$/ { print $1 }' | head -1)"
for kversion in $kfreebsd_versions; do
cat << EOF
# Entry when using ZFS (we have issues with /etc/grub.d/10_kfreebsd)
menuentry 'Debian GNU/kFreeBSD, with kFreeBSD $kversion and ZFS' --class debian --class gnu-kfreebsd --class gnu --class os {
${prepare_boot_cache}
echo 'Loading kernel of FreeBSD $kversion ...'
kfreebsd //@/kfreebsd-$kversion.gz
kfreebsd_module_elf //@/lib/modules/$kversion/opensolaris.ko
kfreebsd_module_elf //@/lib/modules/$kversion/zfs.ko
kfreebsd_module //@/zfs/zpool.cache type=/boot/zfs/zpool.cache
set kFreeBSD.vfs.root.mountfrom=zfs:$zfs_root_device
set kFreeBSD.vfs.root.mountfrom.options=rw
}
EOF
done
I solved the problem this way to have a working solution that does not break
with squeeze upgrades, assuming that a future grub-pc
package will deal well
with my config and I'll be able to remove this script, but I guess I'll have
to install it from backports.
The entry generated by the script when called from update-grub
will be
similar to:
### BEGIN /etc/grub.d/09_zfs-kfreebsd ###
# Entry when using ZFS (we have issues with /etc/grub.d/10_kfreebsd)
menuentry 'Debian GNU/kFreeBSD, with kFreeBSD 8.1-1-amd64 @ ITI' --class debian --class gnu-kfreebsd --class gnu --class os {
insmod part_msdos
insmod zfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set a371979bb836d1fe
echo 'Loading kernel of FreeBSD 8.1-1-amd64 ...'
kfreebsd //@/kfreebsd-8.1-1-amd64.gz
kfreebsd_module_elf //@/lib/modules/8.1-1-amd64/opensolaris.ko
kfreebsd_module_elf //@/lib/modules/8.1-1-amd64/zfs.ko
kfreebsd_module //@/zfs/zpool.cache type=/boot/zfs/zpool.cache
set kFreeBSD.vfs.root.mountfrom=zfs:dkfbf1-ad4s3
set kFreeBSD.vfs.root.mountfrom.options=rw
}
### END /etc/grub.d/10_iti-kfreebsd ###
And after rebooting the machine with this new configuration the system boots OK.
On my next post I'll continue explaining how to compile a kernel that supports the use of the OpenBSD Packet Filter and related technologies (CARP, pflog, etc.).
Posted Wed 24 Nov 2010 21:47:39 CETList of all entries
The FreakyWall (Part 3: Packages)
Posted Tue 30 Nov 2010 22:48:47 CET
libpcap-1.1.1-2 to 2.1.patch
Posted Tue 30 Nov 2010 22:33:45 CET
tcpdump 4.1.1-1 to 1.1.patch
Posted Tue 30 Nov 2010 22:33:45 CET
freebsd-utils-8.1-2 to 2.4.patch
Posted Tue 30 Nov 2010 22:33:45 CET
The Freaky Wall (Part 2: Initial Installation)
Posted Wed 24 Nov 2010 21:47:39 CET
The Freaky Wall (Part 1: Why?)
Posted Mon 22 Nov 2010 22:21:34 CET
Debian Squeeze, PowerPC and the Linux Containers
Posted Tue 26 Oct 2010 13:17:59 CEST
Debian Signs @ DebConf 9
Posted Tue 28 Jul 2009 11:44:29 CEST
DebConf 7 - sto 0
Posted Thu 14 Jun 2007 23:44:35 CEST
Debian Tutorial @ the V Jornades de Programari Lliure
Posted Fri 30 Jun 2006 13:02:08 CEST
SoC and CDDT
Posted Thu 04 May 2006 20:10:36 CEST
Shell Scripts Frontend Tool 0.9.2
Posted Sun 19 Feb 2006 21:15:21 CET
Shell Scripts Frontend Tool
Posted Tue 14 Feb 2006 21:50:54 CET
IICISL Slides
Posted Fri 10 Feb 2006 20:59:21 CET
II Open Source World Conference and the CDDT
Posted Sat 04 Feb 2006 00:07:45 CET
The Power of Kabbalah
Posted Thu 13 Oct 2005 14:09:25 CEST
LliureX Installer (Part 2)
Posted Sat 24 Sep 2005 01:25:56 CEST
LliureX Installer (Part 1)
Posted Tue 20 Sep 2005 12:19:53 CEST
debian-installer and l10n
Posted Fri 05 Aug 2005 02:28:12 CEST
Etch
Posted Tue 07 Jun 2005 10:04:47 CEST
Debian GNU/Linux 3.1 released
Posted Mon 06 Jun 2005 23:57:30 CEST
CDD Dev Camp
Posted Tue 10 May 2005 20:40:33 CEST
Sarge frozen!
Posted Wed 04 May 2005 00:54:30 CEST
CDD Development Camp
Posted Wed 20 Apr 2005 23:21:07 CEST
Guadalinex, Ubuntu and the Debian future
Posted Mon 07 Feb 2005 09:41:17 CET
Two customization models
Posted Mon 13 Dec 2004 08:09:17 CET
CDD Tool Proposal
Posted Tue 07 Dec 2004 12:10:03 CET
A good summary of the Debian release proposals
Posted Wed 01 Dec 2004 21:15:47 CET
Second Ubuntu Conference @ Mataró
Posted Tue 30 Nov 2004 10:49:44 CET
More Custom Debian Distribution Players
Posted Sun 03 Oct 2004 14:07:15 CEST
Back from Florence
Posted Tue 28 Sep 2004 01:49:00 CEST
Going to Firenze World Vision 2004 workshop on CDD
Posted Fri 24 Sep 2004 09:38:01 CEST
Ubuntu release model and Debian
Posted Mon 20 Sep 2004 01:39:21 CEST
The LliureX classroom model
Posted Tue 27 Jul 2004 12:55:32 CEST
Canonical Software and Mark Shuttleworth
Posted Sun 25 Jul 2004 19:14:32 CEST
Second day at Manresa
Posted Thu 08 Jul 2004 20:17:00 CEST
First Day At Manresa
Posted Wed 07 Jul 2004 21:54:00 CEST
My Sarge GR Vote
Posted Fri 02 Jul 2004 20:06:41 CEST