2008年11月11日火曜日

LIBPCAP 1.0.0

10月 27日リリース
PACKET_MMAPにも対応。v2 確認未。
ダーティハックで debian lenny パッケージ作るためのパッチ
忙しすぎ。むーん....

2008年9月3日水曜日

PF_PACKET での vlan_tci - 気になるトコロ

間違い。
> skb->vlan_tci を設定する __vlan_hwaccel_rx() を呼んでいるのは
じゃなくて、__vlan_hwaccel_rx() を呼び出す netif_rx() や netif_receive_skb() の wrapper (とコメントに書いてある) の vlan_hwaccel_rx() や vlan_hwaccel_receive_skb() はいろんなドライバから呼ばれてる。

その他
  • (多分 NETIF_F_HW_VLAN_RX でないデバイスで使う)
    vlan_skb_recv()::net/8021q/vlan_dev.c で skb->vlan_tci をセットしてない

  • packet_sock.tp_reserve で確保する位置
    tpacket_rcv()::net/packet/af_packet.c の中
     } else {
    unsigned maclen = skb_network_offset(skb);
    netoff = TPACKET_ALIGN(po->tp_hdrlen +
    (maclen < 16 ? 16 : maclen)) +
    po->tp_reserve;
    macoff = netoff - maclen;
    }
    ....
    skb_copy_bits(skb, 0, h.raw + macoff, snaplen);
    ....
    case TPACKET_V2:
    h.h2->tp_len = skb->len;
    h.h2->tp_snaplen = snaplen;
    h.h2->tp_mac = macoff;
    h.h2->tp_net = netoff;
    mac より前に確保してる? できれば mac と net の間に VLAN オプションフィールド入れたいけど、すんごいツラいしそーゆー用途ではない? ユーザスペースで mac ヘッダ前にずらす?

2008年9月1日月曜日

Dell Studio で Linux

8月上旬に Dell Studio 17 ノートパソコンなるものを購入。CPU が T9300 (2.5GHz) メモリが 4G という我が家一番の高スペックマシンとなった。お盆休みもあって Linux - debian/lenny 入れてみた。やっぱり? 無線 LAN と GPU で手間取ったので...この位なら切り貼りで良いや。とパッチなど。 CONFIG_DRM は組み込まないように。

Dell Studio の Radeon HD3650

ドライバはここ。カーネルモジュールはいらないかも。と思っていたが、スクロールが遅すぎ。で 2.6.27-rc でコンパイルするためのパッチは以下。GPL なモジュールしか呼び出せない __rcu_read_lock() などこちらを参照しつつ回避しているので注意。
diff -ubBrN fglrx/Makefile fglrx-27/Makefile
--- fglrx/Makefile 2008-08-24 08:47:58.000000000 +0900
+++ fglrx-27/Makefile 2008-08-30 20:27:22.000000000 +0900
@@ -2,6 +2,11 @@

LIBIP_PREFIX ?= ..

+RCU_READ_LOCK := $(shell grep "T __rcu_read_lock" $(SYSMAP) | colrm 9)
+RCU_READ_UNLOCK := $(shell grep "T __rcu_read_unlock" $(SYSMAP) | colrm 9)
+EXTRA_LDFLAGS := --defsym __rcu_read_lock=0x$(RCU_READ_LOCK) \
+ --defsym __rcu_read_unlock=0x$(RCU_READ_UNLOCK)
+
obj-m += fglrx.o
fglrx-libs += libfglrx_ip.a.GCC$(GCC_VER_MAJ)
fglrx-c-objs += firegl_public.o
diff -ubBrN fglrx/firegl_public.c fglrx-27/firegl_public.c
--- fglrx/firegl_public.c 2008-08-24 08:47:58.000000000 +0900
+++ fglrx-27/firegl_public.c 2008-08-31 21:07:45.000000000 +0900
@@ -3077,7 +3077,7 @@
{
#ifdef __SMP__
/* write back invalidate all other CPUs (exported by kernel) */
- if (smp_call_function(deferred_flush, NULL, 1, 0) != 0)
+ if (smp_call_function(deferred_flush, NULL, 0) != 0)
panic("timed out waiting for the other CPUs!\n");

/* invalidate this CPU */
@@ -4796,7 +4796,7 @@
void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call)
{
#ifdef CONFIG_SMP
- smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 );
+ smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 1 );
#endif
}

@@ -4910,7 +4910,7 @@
}

#ifdef CONFIG_SMP
- if (smp_call_function(KCL_setup_pat, NULL, 0, 1) != 0)
+ if (smp_call_function(KCL_setup_pat, NULL, 1) != 0)
return 0;
#endif
KCL_setup_pat(NULL);
@@ -4929,7 +4929,7 @@
}

#ifdef CONFIG_SMP
- if (smp_call_function(KCL_restore_pat, NULL, 0, 1) != 0)
+ if (smp_call_function(KCL_restore_pat, NULL, 1) != 0)
return;
#endif
KCL_restore_pat(NULL);
コンパイルは
make SYSMAP=/boot/System.map-2.6.27-rc5-git1 -C /usr/src/testing SUBDIRS=`pwd` clean
make SYSMAP=/boot/System.map-2.6.27-rc5-git1 -C /usr/src/testing SUBDIRS=`pwd` modules
で。SYSMAP に、そのまま... System.map を指定して。

Dell Studio の WLAN

ドライバはここ。残念なことに mac80211 で deprecated になってしまった CONFIG_IEEE80211。2.6.27-rc でコンパイルするためのパッチは以下
diff -ubBrN hybrid-portsrc-x86_32_5_10_27_6/Makefile hybrid-portsrc-x86_32_5_10_27_6-27/Makefile
--- hybrid-portsrc-x86_32_5_10_27_6/Makefile 2008-07-02 13:32:20.000000000 +0900
+++ hybrid-portsrc-x86_32_5_10_27_6-27/Makefile 2008-08-13 13:29:51.000000000 +0900
@@ -38,3 +38,14 @@
EXTRA_CFLAGS += -I$(src)/src/wl/sys

EXTRA_LDFLAGS := $(src)/lib/wlc_hybrid.o_shipped
+
+KERNEL_PATH ?= /lib/modules/`uname -r`/source
+
+default:
+ make -C $(KERNEL_PATH) M=`pwd` modules
+
+clean:
+ make -C $(KERNEL_PATH) M=`pwd` clean
+
+install:
+ make -C $(KERNEL_PATH) M=`pwd` modules_install
\ No newline at end of file
diff -ubBrN hybrid-portsrc-x86_32_5_10_27_6/src/wl/sys/wl_iw.c hybrid-portsrc-x86_32_5_10_27_6-27/src/wl/sys/wl_iw.c
--- hybrid-portsrc-x86_32_5_10_27_6/src/wl/sys/wl_iw.c 2008-07-02 13:31:02.000000000 +0900
+++ hybrid-portsrc-x86_32_5_10_27_6-27/src/wl/sys/wl_iw.c 2008-08-13 13:28:33.000000000 +0900
@@ -931,12 +931,12 @@
iwe.cmd = SIOCGIWAP;
iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
memcpy(iwe.u.ap_addr.sa_data, &bi->BSSID, ETHER_ADDR_LEN);
- event = iwe_stream_add_event(event, end, &iwe, IW_EV_ADDR_LEN);
+ event = iwe_stream_add_event(info, event, end, &iwe, IW_EV_ADDR_LEN);

iwe.u.data.length = dtoh32(bi->SSID_len);
iwe.cmd = SIOCGIWESSID;
iwe.u.data.flags = 1;
- event = iwe_stream_add_point(event, end, &iwe, bi->SSID);
+ event = iwe_stream_add_point(info, event, end, &iwe, bi->SSID);

if (dtoh16(bi->capability) & (DOT11_CAP_ESS | DOT11_CAP_IBSS)) {
iwe.cmd = SIOCGIWMODE;
@@ -944,7 +944,7 @@
iwe.u.mode = IW_MODE_INFRA;
else
iwe.u.mode = IW_MODE_ADHOC;
- event = iwe_stream_add_event(event, end, &iwe, IW_EV_UINT_LEN);
+ event = iwe_stream_add_event(info, event, end, &iwe, IW_EV_UINT_LEN);
}

iwe.cmd = SIOCGIWFREQ;
@@ -952,13 +952,13 @@
CHSPEC_CHANNEL(bi->chanspec) <= CH_MAX_2G_CHANNEL ?
WF_CHAN_FACTOR_2_4_G : WF_CHAN_FACTOR_5_G);
iwe.u.freq.e = 6;
- event = iwe_stream_add_event(event, end, &iwe, IW_EV_FREQ_LEN);
+ event = iwe_stream_add_event(info, event, end, &iwe, IW_EV_FREQ_LEN);

iwe.cmd = IWEVQUAL;
iwe.u.qual.qual = rssi_to_qual(dtoh16(bi->RSSI));
iwe.u.qual.level = 0x100 + dtoh16(bi->RSSI);
iwe.u.qual.noise = 0x100 + bi->phy_noise;
- event = iwe_stream_add_event(event, end, &iwe, IW_EV_QUAL_LEN);
+ event = iwe_stream_add_event(info, event, end, &iwe, IW_EV_QUAL_LEN);

#if WIRELESS_EXT > 17

@@ -970,7 +970,7 @@
if ((ie = bcm_parse_tlvs(ptr, ptr_len, DOT11_MNG_RSN_ID))) {
iwe.cmd = IWEVGENIE;
iwe.u.data.length = ie->len + 2;
- event = iwe_stream_add_point(event, end, &iwe, (char *)ie);
+ event = iwe_stream_add_point(info, event, end, &iwe, (char *)ie);
}
ptr = ((uint8 *)bi) + sizeof(wl_bss_info_t);
while ((ie = bcm_parse_tlvs(ptr, ptr_len, DOT11_MNG_WPA_ID))) {
@@ -978,7 +978,7 @@
if (ie_is_wps_ie(((uint8 **)&ie), &ptr, &ptr_len)) {
iwe.cmd = IWEVGENIE;
iwe.u.data.length = ie->len + 2;
- event = iwe_stream_add_point(event, end, &iwe, (char *)ie);
+ event = iwe_stream_add_point(info, event, end, &iwe, (char *)ie);
break;
}
}
@@ -989,7 +989,7 @@
if (ie_is_wpa_ie(((uint8 **)&ie), &ptr, &ptr_len)) {
iwe.cmd = IWEVGENIE;
iwe.u.data.length = ie->len + 2;
- event = iwe_stream_add_point(event, end, &iwe, (char *)ie);
+ event = iwe_stream_add_point(info, event, end, &iwe, (char *)ie);
goto done;
}
}
@@ -1003,7 +1003,7 @@
else
iwe.u.data.flags = IW_ENCODE_DISABLED;
iwe.u.data.length = 0;
- event = iwe_stream_add_point(event, end, &iwe, (char *)event);
+ event = iwe_stream_add_point(info, event, end, &iwe, (char *)event);

if (bi->rateset.count) {
value = event + IW_EV_LCP_LEN;
@@ -1012,7 +1012,7 @@
iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
for (j = 0; j < bi->rateset.count && j < IW_MAX_BITRATES; j++) {
iwe.u.bitrate.value = (bi->rateset.rates[j] & 0x7f) * 500000;
- value = iwe_stream_add_value(event, value, end, &iwe,
+ value = iwe_stream_add_value(info, event, value, end, &iwe,
IW_EV_PARAM_LEN);
}
event = value;

2008年8月26日火曜日

PF_PACKET での vlan_tci

tcpdump で 802.1q の続きになるのか? 2.6.27 にマージされるネットワーク周りのお話で Patrick McHardy さんのいくつか
  • vlan: uninline __vlan_hwaccel_rx
  • packet: deliver VLAN TCI to userspace
  • packet: add PACKET_RESERVE sockopt
あたりが該当しそうだけど...inline ではない、skb->vlan_tci を設定する __vlan_hwaccel_rx() を呼んでいるのは "Chelsio T3-based" なるドライバのみ?

例の lincap.c に新しい setsockopt() してみたが

/* set VERSION 2 - before pg_vec has set */
val = TPACKET_V2;
if ((setsockopt(fd, SOL_PACKET, PACKET_VERSION, (void *)&val, sizeof(val))) != 0) {
perror("setsockopt(PACKET_VERSION)");
close(fd);
return 1;
}

val = 4; /* __be16 0x8100, __be16 h_vlan_TCI - before pg_vec has set, too */
if ((setsockopt(fd, SOL_PACKET, PACKET_RESERVE, (void *)&val, sizeof(val))) != 0) {
perror("setsockopt(PACKET_RESERVE)");
close(fd);
return 1;
}
....
for (i = 0;;) {
while (*(unsigned long*)ring[i].iov_base) {
struct tpacket2_hdr *h = ring[i].iov_base;
struct sockaddr_ll *sll = (void *)h + TPACKET_ALIGN(sizeof(*h));
unsigned char *bp = (unsigned char *)h + h->tp_mac;

printf("%u.%.6u: if: %u, vid: %u, type: %s, len: %u\n",
h->tp_sec, h->tp_nsec,
sll->sll_ifindex,
h->tp_vlan_tci,
names[sll->sll_pkttype],
h->tp_len);
まぁ、nsec が取れるようになったのみ。 VLAN ID 取れたら PACKET_RESERVED のところにコピーしてあげるのかな? でも RESERVE されるのは mac よりも前っぽいので、思い違い?

2008年8月25日月曜日

hostapd の snapshot

こちらを参照しつつ...git かぁ。libnl1.1 以上が必要っぽく debian であれば lenny で apt-get install libnl-dev。更に /usr/include/linux は linux.dpkg-dist か何かに変更して 2.6.27-rc の /usr/src/linux/include/linux を /usr/include に symlink。

defconfig を .config にコピーして CONFIG_DRIVER_NL80211 を有効にして make。WPA だけの最小? config は
interface=wlan0
driver=nl80211
hw_mode=g
channel=6
ssid=tetest
wpa=1
wpa_passphrase=hogehogemogemoge_foobarbar
で良い? ./hostapd -dd tetest.conf とした後、別から probe 投げると tetest と返すところまで。

mac80211 の Master mode

2.6.27-rc にて mac80211_hwsim なる WLAN デバイスのシミュレータが入ったとのお話。Documentation/networking/mac80211_hwsim/README を眺めると
Please note that the current Linux kernel does not enable AP mode, so a
simple patch is needed to enable AP mode selection:
http://johannes.sipsolutions.net/patches/kernel/all/LATEST/006-allow-ap-vlan-modes.patch
ここにある###-allow-ap-vlan-modes.patch がソレなのだが、コメントが...
Don't allow doing it with wext because then
people will just attempt to do it manually (without hostapd) and
complain that it doesn't work.
あー...オレオレ。該当。文句言う言う。なんて話はさておき。

とは言え mac80211 なデバイス全てで hostapd が動くわけではなさげ。と言うか IEEE80211_IF_TYPE_AP が有効なわけではなさげ。手元にあるデバイス...zd1211rw, ath5k, rtl8187, rt2x00 内 2.6.27-rc にて動作するのは rt2x00 のみ。また ath5k は近々 という感じ。で rt2x00 の何を使っているかと言えば
$ lsusb
...
Bus 003 Device 003: ID 0411:0067 MelCo., Inc. WLI-U2-KG54-AI WLAN
...
バッファローの製品。他は?
fgrep "USB_DEVICE(" /usr/src/testing/drivers/net/wireless/rt2x00/*.c
なんてたたくと山ほど。USB_DEVICE の中、例えば rt73usb.c に、こんな行
        /* Buffalo */
{ USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) },
があったら、Google 様に "0411:00f4"と尋ねると、ヒントが見付かることもアリ。

ところで WPA や RSN ではない Master mode とするために、こんな抜粋してみたけど...最初のドキュメント通り、Master mode になるも ip link set 〜 up あるいは ifconfig 〜 up なんてしてもリンクアップしているように見えますが、動きませんっ。ええ、理解してませんっ。
#include <stdio.h>
#include <linux/nl80211.h>

#include <netlink/genl/genl.h>
#include <netlink/genl/ctrl.h>
#include <netlink/genl/mngt.h>
#include <netlink/route/link.h>

int name2ifindex(char *ifname)
{
struct nl_handle *nlh;
struct nl_cache *link_cache;
int ifindex = -1;

if (!ifname)
return -1;

nlh = nl_handle_alloc();
if (!nlh)
return -1;

if (nl_connect(nlh, NETLINK_ROUTE) < 0)
goto errout;

link_cache = rtnl_link_alloc_cache(nlh);
if (!link_cache)
goto errout;

ifindex = rtnl_link_name2i(link_cache, ifname);

nl_cache_free(link_cache);
errout:
nl_close(nlh);
nl_handle_destroy(nlh);

return ifindex;
}

int main(int argc, char *argv[])
{
struct nl_handle *h;
struct nl_msg *msg;
struct nl_cache *cache;
struct genl_family *family;
int ifindex = name2ifindex(argv[1]);

if (ifindex < 0) {
fprintf(stderr, "could not get ifindex: %s\n", argv[1]);
return -1;
}

h = nl_handle_alloc();
if (!h) {
nl_perror("nl_handle_alloc");
return -1;
}

if (genl_connect(h) < 0) {
nl_perror("genl_connect");
goto nla_handle_failure_2;
}

cache = genl_ctrl_alloc_cache(h);
if (!cache) {
nl_perror("genl_ctrl_alloc_cache");
goto nla_handle_failure_1;
}

family = genl_ctrl_search_by_name(cache, "nl80211");
if (!family) {
nl_perror("search nl80211 family");
goto nla_cache_failure;
}

msg = nlmsg_alloc();
if (!msg) {
nl_perror("nlmsg_alloc");
goto nla_cache_failure;
}

genlmsg_put(msg, 0, 0, genl_family_get_id(family), 0,
0, NL80211_CMD_SET_INTERFACE, 0);
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, ifindex);
NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, NL80211_IFTYPE_AP);


if (nl_send_auto_complete(h, msg) < 0 || nl_wait_for_ack(h) < 0)
nl_perror("Failed to set interface to master mode");

nla_put_failure:
nlmsg_free(msg);
nla_cache_failure:
nl_cache_free(cache);
nla_handle_failure_1:
nl_close(h);
nla_handle_failure_2:
nl_handle_destroy(h);

return 0;
}

FreeRadius 〜 EAP/TLS, EAP/TTLS, EAP/PEAP 〜 Linux Debian #2

いっ...一ヶ月以上放置。

> いや、ここに張る意味あんまり無いけど

で、こちら。
etch 用は TTLS 作っていなかったけど修正。ロクに試さないでいて、ごめんなさい。
例のごとくですが、おかしなトコありましたら一報もらえると嬉しいです。

2008年7月8日火曜日

FreeRadius 〜 EAP/TLS, EAP/TTLS, EAP/PEAP 〜 Linux Debian Lenny

いや、ここに張る意味あんまり無いけどチラシの裏、ちょっと jot。rules に

if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then
echo "$$pkg links to openssl"
exit 1
fi
ここまでやってあると、イカンことのように思えてくるけど....
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/control freeradius-2.0.4+dfsg/debian/control
--- freeradius-2.0.4+dfsg.orig/debian/control 2008-05-19 11:47:18.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/control 2008-07-08 22:13:50.000000000 +0900
@@ -1,5 +1,5 @@
Source: freeradius
-Build-Depends: autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, lib
pcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev
+Build-Depends: autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, lib
pcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev libssl-dev
Section: net
Priority: optional
Maintainer: Stephen Gran
@@ -11,7 +11,7 @@
Depends: lsb-base (>= 3.0-6), ${shlibs:Depends}, freeradius-common, libfreeradius2 (= ${binary:Version})
Provides: radius-server
Recommends: freeradius-utils
-Suggests: freeradius-ldap, freeradius-mysql, freeradius-krb5, freeradius-postgresql
+Suggests: freeradius-ldap, freeradius-mysql, freeradius-krb5, freeradius-postgresql, freeradius-tls, freeradius-peap
Description: a high-performance and highly configurable RADIUS server
A high-performance RADIUS server with support for...
- many vendor-specific attributes
@@ -121,3 +121,26 @@
This package contains the detached debugging symbols for the Debian freeradius
packages

+Package: freeradius-tls
+Architecture: any
+Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
+Description: eap-tls module for FreeRADIUS server
+ Debian will not provide a binary version of the rlm_eap_tls.so library. This
+ module is required if you want to use EAP/TLS authentication, commonly used
+ for WiFi access points
+
+Package: freeradius-ttls
+Architecture: any
+Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
+Description: eap-ttls module for FreeRADIUS server
+ Debian will not provide a binary version of the rlm_eap_ttls.so library. This
+ module is required if you want to use EAP/TLS authentication, commonly used
+ for WiFi access points
+
+Package: freeradius-peap
+Architecture: any
+Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
+Description: eap-peap module for FreeRADIUS server
+ Debian will not provide a binary version of the rlm_eap_peap.so library. This
+ module is required if you want to use EAP/PEAP authentication, commonly used
+ for WiFi access points
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.install freeradius-2.0.4+dfsg/debian/freeradius-peap.install
--- freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.install 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/freeradius-peap.install 2008-07-08 22:13:50.000000000 +0900
@@ -0,0 +1 @@
+usr/lib/freeradius/rlm_eap_peap*.so
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.postinst freeradius-2.0.4+dfsg/debian/freeradius-peap.postinst
--- freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.postinst 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/freeradius-peap.postinst 2008-07-08 22:13:50.000000000 +0900
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ configure)
+ if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
+ invoke-rc.d freeradius restart
+ else
+ /etc/init.d/freeradius restart
+ fi
+ ;;
+ abort-upgrade)
+ ;;
+ abort-remove)
+ ;;
+ abort-deconfigure)
+ ;;
+esac
+
+#DEBHELPER#
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.install freeradius-2.0.4+dfsg/debian/freeradius-tls.install
--- freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.install 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/freeradius-tls.install 2008-07-08 22:13:50.000000000 +0900
@@ -0,0 +1 @@
+usr/lib/freeradius/rlm_eap_tls*.so
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.postinst freeradius-2.0.4+dfsg/debian/freeradius-tls.postinst
--- freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.postinst 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/freeradius-tls.postinst 2008-07-08 22:13:50.000000000 +0900
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ configure)
+ if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
+ invoke-rc.d freeradius restart
+ else
+ /etc/init.d/freeradius restart
+ fi
+ ;;
+ abort-upgrade)
+ ;;
+ abort-remove)
+ ;;
+ abort-deconfigure)
+ ;;
+esac
+
+#DEBHELPER#
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.install freeradius-2.0.4+dfsg/debian/freeradius-ttls.install
--- freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.install 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/freeradius-ttls.install 2008-07-08 22:13:50.000000000 +0900
@@ -0,0 +1 @@
+usr/lib/freeradius/rlm_eap_ttls*.so
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.postinst freeradius-2.0.4+dfsg/debian/freeradius-ttls.postinst
--- freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.postinst 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/freeradius-ttls.postinst 2008-07-08 22:13:50.000000000 +0900
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ configure)
+ if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
+ invoke-rc.d freeradius restart
+ else
+ /etc/init.d/freeradius restart
+ fi
+ ;;
+ abort-upgrade)
+ ;;
+ abort-remove)
+ ;;
+ abort-deconfigure)
+ ;;
+esac
+
+#DEBHELPER#
diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/rules freeradius-2.0.4+dfsg/debian/rules
--- freeradius-2.0.4+dfsg.orig/debian/rules 2008-05-19 11:47:18.000000000 +0900
+++ freeradius-2.0.4+dfsg/debian/rules 2008-07-08 22:13:50.000000000 +0900
@@ -26,7 +26,7 @@
pkgdocdir = /usr/share/doc/$(package)
raddbdir = /etc/$(package)

-modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql
+modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql eap_peap eap_tls eap_ttls
pkgs=$(shell dh_listpackages)

# This has to be exported to make some magic below work.
@@ -80,14 +80,10 @@
--with-large-files --with-udpfromto --with-edir \
--enable-developer \
--config-cache \
- --without-rlm_eap_tls \
- --without-rlm_eap_ttls \
- --without-rlm_eap_peap \
--without-rlm_eap_tnc \
--without-rlm_otp \
--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \
--with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \
- --without-openssl \
--without-rlm_eap_ikev2 \
--without-rlm_sql_oracle \
--without-rlm_sql_unixodbc \
@@ -164,6 +160,7 @@

for mod in ${modulelist}; do \
pkg=$${mod##sql_} ; \
+ pkg=$${mod##eap_} ; \
dh_install --sourcedir=$(freeradius_dir) -p freeradius-$$pkg ; \
rm -f $(freeradius_dir)/usr/lib/freeradius/rlm_$$mod*.so ; \
done
@@ -174,12 +171,6 @@
dh_strip -a --dbg-package=freeradius-dbg

dh_makeshlibs -a -n
- for pkg in ${pkgs} ; do \
- if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then \
- echo "$$pkg links to openssl" ;\
- exit 1 ;\
- fi ;\
- done
dh_shlibdeps

binary-common:
apt-get source freeradius して上記パッチあてて fakeroot debian/rules binary すると、上位のディレクトリに freeradius-peap freeradius-tls freeradius-ttls というパッケージが出来上がると思います。

2008年7月3日木曜日

netflow # 2

ながーい寄り道をしてやっと 2。何のことは無い libpcap 入れるんだけど、ノーマル以外にもいくつかありますよ。という閑話が終って本題。ミラーポートをキャプチャして netflow として export するもの。などがあるようです。fprobe の -ulog なるものは netfilter の ulog (今は nflog に取って代わった?) を。lprobe は素の CONFIG_PACKET_MMAP を。以外は libpcap を使っているようです。ただし nprobe は ノーマルでも使えますが、勿論 PF_RING な libpcap を期待しています。

# netfilter メンテナの人は nprobe を NF_CT_ACCT 紹介で挙げていた覚えが....

コレクタ側もいくつかあると思いますが、両方共に debian パッケージにある fprobe と flow-tools を使ってみませう。lenny の例ですが etch も大差ないと思います。
# apt-get install fprobe
....
Setting up fprobe (1.1-7) ...
Starting fprobe: fprobe.
# /etc/init.d/fprobe stop
Stopping fprobe: fprobe.
キャプチャするインターフェースとコレクタのホスト、ポートを尋ねられますが、後で変更できますので、適当にそのまま。
# apt-get install flow-tools
....
Setting up flow-tools (1:0.68-12) ...
Starting flow-capture: flow-capture.
# /etc/init.d/flow-capture stop
Stopping flow-capture: flow-capture.
で勢い衰えたので、設定からはまた後日、近日....

netflow # 1.6

カーネルパッチあててコンパイルするのが嫌で MMAP mode on使っている。あるいは、イタズラに付き合ってくれている奇特な人の内、キャプチャオンリーのデバイスにて、もうほんの一声だけ性能上げたい。かつ不具合と戦える。という方に。

カーネルが 2.6.16 と 2.6.24, 2.6.25。debian の etch, lenny で試して何となく動いている こちら sch_ingnore を試してみて下さい。etch, lenny 共にカーネルがコンパイルできるパッケージ群と iproute-dev パッケージが必要です。

# 面倒クサがって実質 libnetlink.h 参照しているだけですが....
$ tar xzf mod_ingnore.tgz 
$ cd mod_ingnore
$ make
make -C /lib/modules/`uname -r`/source M=`pwd` modules
make[1]: Entering directory `/usr/src/linux'
CC [M] /home/jot/src/mod_ingnore/sch_ingnore.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/jot/src/mod_ingnore/sch_ingnore.mod.o
LD [M] /home/jot/src/mod_ingnore/sch_ingnore.ko
make[1]: Leaving directory `/usr/src/linux'
cc -I./include -shared -fpic -o q_ingnore.so q_ingnore.c
$ ls
Makefile include q_ingnore.so sch_ingnore.mod.c
Module.markers modules.order sch_ingnore.c sch_ingnore.mod.o
Module.symvers q_ingnore.c sch_ingnore.ko sch_ingnore.o
ingress qdisc のような面構えですが、ただただパケット落とすだけですので qdisc ではありません。カーネルモジュール sch_ingnore.ko の方はどこでも良いのですが、まぁ /lib/modules/`uname -r`/kernel/net/sched の下に。q_ingnore.so/usr/lib/tc の下にコピーして下さい。それなりの場所にカーネルモジュール置いたので
# depmod -a
# tc qdisc add dev eth1 ingnore
# tc qdisc ls dev eth1
qdisc ingnore ffff: parent ffff:fff1
これで eth1 はキャプチャはしますが、その後通常よりちょっとだけ早くパケット落とします。net/core/dev.c の関数 netif_receive_skb() を参照してみて下さい

....と書いていて大事なコト忘レタ。#ifdef されている通りカーネルで CONFIG_NET_CLS_ACT が有効になっていないと意味がありません。

netflow # 1.5

ピーピング・トムにならなかった方、卒業した方。ようこそ、続きです。

tcpdump などキャプチャするもの大抵は libpcap を用います。キャプチャする linux box の性能とネットワークの流量に依存してしまいますが、linux でのノーマルの libpcap は性能が芳しくないために結構なパケットを取りこぼしてしまいます。もっと効率良くキャプチャをっ。と
  1. カーネルパッチとユーザランド。勿論 libpcap 込みのPF_RING

  2. vanilla カーネルに組み込まれている CONFIG_PACKET_MMAP を用いた A libpcap version which supports MMAP mode on

  3. 2 にイタズラして環境変数付けなくても良い悪趣味 libpcap
などがあります。PF_RING にしても CONFIG_PACKET_MMAP にしても、受信したパケットをユーザランドとカーネルスペースで共有した領域にコピーするようです。

1 か 2 がお勧めですが、ドキュメント眺めたり Google様に尋ねながら so name がディストリビューション標準の libpcap と同じ名前になるよう shared library 作ってみて下さい。適当な...例えば /home/jot/lib に置いて、なかなか難かしい条件ですが、一定の量。あるいはフルフルの量を機器に通して
  • tcpdump -ni any > /dev/null
  • LD_LIBRARY_PATH=/home/jot/lib tcpdump -ni any > /dev/null
同じ程度の時間経った後 Ctrl-C で終了した後の統計
# tcpdump -ni any > /dev/null
tcpdump: WARNING: Promiscuous mode not supported on the "any" device
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
^Ctcpdump: pcap_loop:
n packets captured
n packets received by filter
#### packets dropped by kernel
#### の箇所、結構な数減っていません?

おぉっと唸った。かつ、置き換えた事実を忘れない。かつ、ちょっと位の不具合とは戦える。という方。置き換えましょう。

余談ですがトラヒック負荷かけるのであれば CONFIG_NET_PKTGEN を Documentation/networking/pktgen.txt 眺めたり、こちらを参照したりで pktgen.sh。あるいは PF_RING の方は stream.c なるものを使っていたらしい。その当時は無かったカーネルスペースの pktgen の方がキョーレツ。

netflow # 1

exporter はその 5 で終らせてもらって新たに。netflow を喋ることができない機器のポートをミラーしてキャプチャ。netflow に変換? してコレクタに送ってごにょごにょする方法。

まずは機器の設定ですが、「ポートミラーリング」で Google様に尋ねて下さい。気を付ける点ですが、一つのポートをミラーリングするにあたっては全二重の場合、送信 / 受信それぞれ一つづつ。加えて自身が通信するため。計 3つインターフェースが必要になります。例えば Catalyst で fa0/1 の送信を fa0/11 受信を fa0/12。自身が通信するポートを fa0/21 といった場合
monitor session 1 source int fa0/1 tx
monitor session 2 source int fa0/1 rx
monitor session 1 dest int fa0/11
monitor session 2 dest int fa0/12
int fa0/21
switchport mode access
switchport access vlan 100
spanning-tree portfast
手元に機器があるワケでは無いので適当。こんな感じといったところです。

OpenMicroServer + debian を例えにして、eth0 が自身の通信。eth1 で送信、eth2 で受信のキャプチャをするとして eth0 を fa0/21 と。fa0/11 と eth1、fa0/12 と eth2 をそれぞれ繋ぎます。eth1, 2 でキャプチャするのは NAPI 対応の e1000 だから。

親切なアプリケーションであれば必要ありませんが、一応 eth1, 2 を promisc にしておきます。
ip link set eth1 promisc on
ip link set eth2 promisc on
キャプチャのメジャードコは tcpdump。と言ってしまうとオヤジ? tshark とか使うのかしら? まぁ tcpdump とさせてもらって
tcpdump -ni any
とツラツラと流れ行く画面を眺めて下さい。あきたら/var/lib/apt/lists/*_Packages 内の ^Depends:.*libpcap の怪しそうなパッケージインストールしてニヤニヤと....で止めたら犯罪助長するのかっ。と怒られそうですが、長くなりそうなので #2 で。

2008年6月17日火曜日

PACKET_MMAP #2

ごめんなさいっ。libpcap のパッチおかしかった。修正しましたので、以前のものを持って行った方は、取り直して下さい、すいません。でパッチのあて方ですが、debian 前提で etch lenny 共に
apt-get source libpcap0.8
して、ソースディレクトリに cd した後
etch
これ持って行って
patch -p1 < libpcap0.8-etch.patch
./debian/rules binary
で上位ディレクトリに deb パッケージが出来ます。

lenny
持って行くモノがこれ - libpcap0.8-lenny.patch 以外は etch と同じです。
以前も書きましたが configure で root 権限が必要なシステムコール使っていますので、fakeroot では無効のままです、ご注意下さい。生? の debian/patches はそれぞれ etch用lenny用にあります。また修正があったらお知らせしますし、おかしなトコがありましたら教えてやって下さい。

一つ (だけじゃないけど) イマイチなのが PACKET_RX_RING 使っているか使っていないかがわからない点。見栄えが悪いですが stderr に use PACKET_MMAP, ... なんて出力があれば PACKET_RX_RING 使っています。/proc/net/packet あたりでわかれば嬉しいけど、理解していない。

あぁ、また一つ。繰り返しになりますが、デフォルト 8Mbyte mmap します。1514 フルであれば 4096 パケットです。多すぎ? 環境変数 PCAP_MMAP_MEMSIZE をバイト単位で調節して下さい。tcpdump であれば
PCAP_MMAP_MEMSIZE=262144 tcpdump -nevi eth0 'ip and port...
あるいは
export PCAP_MMAP_MEMSIZE=524288
tcpdump ...
などなど。また ingnore や lprobe については後日、近日。と自分に言いきかせて、今日も夜が更けてくてくてく....

2008年6月10日火曜日

PACKET_MMAP #1

広告? チラシ? の裏よりタチが悪い。自分でも忘れない内にコンパイルや使い方書かないと....と思いながら、モチベーションというか忙しかったりする。で、チラシの裏。lenny 用も etch に準じないと...。あっ、./debian/rules binary する前に autoconf が必要。

2008年6月8日日曜日

netflow の exporter その 5

その後ですが、PF_RING を使わずに。と NetBSD のパッケージ? にある古い nprobe 持ってきて大幅ダーティハック。稚拙ですが
Netflow exporter もどき lprobe として ここ
に置いときます。パッチなど送っていただければ幸せです。

IPv4 だけだし、flow とは名ばかりで TCP のフラグ見ていないし、IP のフラグメンテーションも処理していません。ただノーマル? の libpcap 使った nprobe や fprobe よりはパケット落ちがありません。で、OpenMicroServer にて最高 25kpkt/s 程の中、何とかパケット落ちなく頑張って稼働している様です。

flow-tools の flow-capture で集めた後、flowscan-cuflow で RRD グラフを作ってみたのですが /24 とかのネットワークが混在しまくっていて、マスクの集合で in と out を追いきれず....utils の下にインターフェースで in out を区別する、ほんのちょっとだけ修正した CUFlow.pm がありますので、こちらも良ろしかったら。

drop, only drop ingress qdisc

例の PF_RING であったり、web を彷徨っていると NET_RX_CONSUMED なるパッチがあったり、キャプチャしている「だけ」のインターフェースでは PF_PACKET socket に届けた後は何もしなくて良いよ。vanilla カーネルに直接手を入れるのを避けるためには...とツラツラソース眺めたところ ingress qdisc の判断が良さげ。

で、tc で何とかならないか。と
tc qdisc add dev eth1 ingress handle ffff:
tc filter del dev eth1 parent ffff: protocol ip priority 10 u32 match u8 0 0 police mtu 1 drop flowid :1
試してみたところ、かえって遅くなってしまった。恐らく毎度の勉強不足。フィルタではなく、ただただ落とす方法を探せず....とは言え何とかならないか? とダーティハック
無視するだけの - いんぐのあ (ingnore)
ネーミングセンス無さすぎ? tc コマンドのソース持って来て ingress 該当部分を ingnore とすれば使えるけど面倒そうなので、ユーザスペースのコマンドは後日予定。

こちらも毎度正確な測定はしていないけど、こちらの linpcap.c にて表示せず、送信側は pktgen で試してみたところ、数パーセントだけど確実に取得量は増えている模様。

mmap'ed libpcap

PF_RING ではなくて PACKET_MMAP を使おう。ということで libpcap 試していたが
> おまけと言っては失礼だけど環境変数設定すると様子が眺められたり、挙動を変更できるらしいのも、ちょと嬉し。
と言うか環境変数設定「しなくては」動作しない。よく忘れるし、もの珍しげに CONFIG_SLUB としているせいか PCAP_MEMORY=max も怪しげ。細かな時間調整も特段必要なく、理解していないマルチキャストを消したり....
debian lenny 用のパッチ
正直試しておらず、tcpdump 動いたぁ。のレベルですが、良かったら使ってやって下さい。何も指定しないと 8Mbyte のメモリを map します。環境変数 PCAP_MMAP_MEMSIZE で変更可ですが、私は忘れるでしょう...

apt-get source libpcap0.8 した後に debian/patch に上記 60_ring.diff 置いて、同じディレクトリにある series にエントリ追加します。で debian/rules binary なのですが、fakeroot では組み込まれないと思います。

お付き合いいただける方はパッチとか送っていただけると、幸せです。

2008年6月3日火曜日

kgdb?

ただただソース眺めているだけの私に言われたくないだろうが 2.6.26 から kgdb が vanilla にマージされるそーで rc 見ると確かに....驚いた。信念よりも嬉しい人の方が多くなったのかなぁ。十中九点九 私には使いきれない。が、ちょっと jot。

カーネルコンパイルのオプションで
CONFIG_DEBUG_INFO=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
としてコンパイル。VMWare にインストールした後で/boot/grub/menu.lstにこんな感じで update-grub
# kopt=root=/dev/sda1 ro kgdbwait kgdboc=ttyS0,115200
あっ、その前にありがたくこちらを参考にしつつシリアルの設定。一点手元の socat では
socat unix-connect:/tmp/vmware-serial-$1-$PORT \
pty:link=/tmp/ttyv$1$PORT,raw,echo=0,waitslave
では NG で pty,link=... としなくてはならんかった。その後リブートすると
....
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
00:09 ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:0a ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
kgdb: Registerd I/O driver kgdboc.
kgdb: Waiting for connection from remote gdb...
で止まる。ホスト側で socat して、手元に先の vmlinux 置いて
$ pwd
/usr/src/i386linux
$ gdb -q
(gdb) set remotebaud 115200
(gdb) symbol-file vmlinux
Reading symbols from /usr/src/i386linux/vmlinux...done.
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) target remote /tmp/ttyvHOST
Remote debugging using /tmp/ttyvHOST
kgdb_breakpoint () at kernel/kgdb.c:1677
1677 wmb(); /* Sync point after breakpoint */
(gdb) n
[New Thread 1]
1678 atomic_set(&kgdb_setting_breakpoint, 0);
(gdb) n
1679 }
(gdb) list
1674 atomic_set(&kgdb_setting_breakpoint, 1);
1675 wmb(); /* Sync point before breakpoint */
1676 arch_kgdb_breakpoint();
1677 wmb(); /* Sync point after breakpoint */
1678 atomic_set(&kgdb_setting_breakpoint, 0);
1679 }
1680 EXPORT_SYMBOL_GPL(kgdb_breakpoint);
1681
1682 static int __init opt_kgdb_wait(char *str)
1683 {
(gdb)
をぉ.... # こーして夜がふけてくてくてくてく

2008年5月6日火曜日

PF_RING のパッチ

2004年 3月と結構以前の話だけど、こんなやりとりがあったらしい。jamal さんとしては PACKET_MMAP (と NAPI) で充分。でないならばプロファイル基に相談しましょ。といったところ。確かに大枠の仕組としてはソケットのバッファを mmap するという点で同じ。何が違うのか...

例のごとく読んでいないが、net/core/dev.cnetif_receive_skb() の初っ端で、ハンドラ呼び出して...む〜ん、わからん...で return(NET_RX_SUCCESS); してる。fragmentation 処理入れたり、forwarding の場合はもう一度 queue に入れたり? わからんのに、こんなことゆーと叱られそうだが、何よりソースが見難い...ごめんなさい。

という何となくの経過を経て、やっぱ使うの止めた。vanilla にある CONFIG_PACKET_MMAP で戦ってみようと思う今日この頃。こっちも聞きかじっただけだが、キャプチャではなくパケット転送するのであれば NF_CT_ACCT - この PDF辺りから始まったお話? とかどうかしら?

X でのキーボード

自宅の古い Vaio (PCG-R505R/K) で X を起動すると _(underscore) と ](rightbracket) が使えていない事が今になって判明。と、最近は Web ブラウズしかしていないことも判明。debian lenny の xorg.conf にて
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "jp106"
Option "XkbLayout" "jp"
# Option "XkbVariant" "106"
Option "XkbOptions" "ctrl:swapcaps"
EndSection
で OK。

2008年4月24日木曜日

netflow の exporter その 4

その 5 はその後で...測定せず多々感覚的だけど、いったん自分の中ではオチをつけよう。

きっかけは....良くある話かわからないけどアカウンティングを取ることができないルータ、スイッチでアカウントを取りたかったと。でインターフェースのミラーをして、キャプチャするんだけど送信、受信で 2つのインターフェースの面倒を見なくちゃイカンと。100Mbit 全二重に流れるパケットをロス少なく (古い) nprobe とぷらっとホームさんの OpenMicroServer で取ろう。ってトコ。

新しい nprobe も購入してみたが netflow の v9 や VLAN MPLS などが不要であれば古いものでも、まぁ。加えて正確なフローというより、どこと、どこの、どのポート使った通信が多いか。程度がわかれば十分だし。

MMAPed な libpcap (って言うのかな?) と PF_RING な libpcap では、PF_RING の方が少し良さげ。ただしデバイスに NULL あるいは any を指定することができず、カーネルパッチも必要。また pcap_hoge を pfring_hoge で実装しているのだけど、何となく pcap_loop に重きを置いて、他が足りない感アリ。

PF_RING で二つのインターフェースを一つの (nprobe) プロセスで面倒見ようとこんなパッチ眺めながら epollで実装してみたが、一つのインターフェースで二つプロセス稼働させた方が全く良い。PF_RING のカーネルパッチ眺めると epoll ではなく poll の方が良い? 試しておらず。

むーん。と悩んだ結果....ifenslave で二つのインターフェースをバンディングして、これをデバイスと指定することで良しとした。ring.ko をロードする時に受信のみとするのと ethtool の -G で デバイスの rx ring を大きめに設定してみる。

で結果は 100M全二重はチト辛い。上下合わせてピーク 150M程度のトラヒックで /proc/net/pf_ring/<プロセスID>-<デバイス名>- みたいなエントリを覗くと 6〜7% ロスしてる。

何とかできるか...と無い知恵を絞って画策してみたが nprobe の商用サイト? で販売している筐体 nBox のスペック眺めたところ、OpenMicroServer では難かしいカモ。と弱気になったところで...オチ。

2008年4月16日水曜日

netflow の exporter その 3

先日書き綴ったものの修正。
>Documentation/networking/packet_mmap.txt のサイトはアクセスできず
>ここからソース持ってきてみたものの x86 のみ? で早々にあきらめ。
mb() でアセンブラがあったが、使っておらず、またこれら PACKET_MMAP な libpcap を参考にした lincap.c についても mb() についてはカーネルヘッダから、それなりのものを持って来れば良さげ。また
>PF_RING に挑戦したが...扱っている量がそーとーなレベルという事に気付く。
なんて書いたが、少々試したところ歴然たる差があった。当初試したときには pcap_open() での *device に NULL あるいは any が指定できるものと思い込んでいたが、指定して PF_RING が feature されずに動いてしまったため差が無いと思い込んでいた。この any が指定できないのが少々辛かったりするので PACKET_MMAP の libpcap も作成して試してみよう。

おまけと言っては失礼だけど環境変数設定すると様子が眺められたり、挙動を変更できるらしいのも、ちょと嬉し。

で、libpcap-0.9.8.20080206.tar.gz を持ってきて展開した後、debian lenny にて apt-get source libpcap0.8 この debian ディレクトリを丸ごとコピーして以下 debian/patches/10_shared_lib.diff を参考にした Makefile.in のパッチ。rules にて patch 当てないようにして
--- libpcap-0.9.8.20080206/Makefile.in  2008-02-08 08:49:02.000000000 +0900
+++ libpcap-0.9.8.20080206-deb/Makefile.in 2008-04-16 22:12:48.000000000 +0900
@@ -116,6 +116,17 @@
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libpcap_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@
+
+# some defines for shared library compilation
+MAJ=$(shell head -1 debian/changelog | perl -nle 'm/\S+(\d.\d)\s+\(\d\.\d\.\d+-\S+\)/ and print $$1')
+MIN=$(shell head -1 debian/changelog | perl -nle 'm/\S+\s+\(\d\.\d\.(\d+)-\S+\)/ and print $$1')
+LIBVERSION=$(shell head -1 debian/changelog | perl -nle 'm/\S+\s+\((\S+)-\S+\)/ and print $$1')
+VERSION=$(MAJ).$(MIN)
+LIBNAME=pcap
+LIBRARY=lib$(LIBNAME).a
+SOLIBRARY=lib$(LIBNAME).so
+SHAREDLIB=$(SOLIBRARY).$(LIBVERSION)
+
depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -155,6 +166,7 @@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ)
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
@@ -278,7 +290,7 @@
LTRELEASE = $(RMAJOR).$(RMINOR).$(RREVISION)
LTVERSION = $(VCURRENT):$(VREVISION):$(VAGE)
PCAP = @V_PCAP@
-PSRC = pcap-@V_PCAP@.c
+PSRC = pcap-@V_PCAP@.c pcap-ring.c
FSRC = fad-@V_FINDALLDEVS@.c
FADS = @V_FADS@
LEX = @V_LEX@
@@ -298,7 +310,9 @@
MAINTAINERCLEANFILES = Makefile.in Makefile.am.bak configure.ac.bak aclocal.m4 configure config.h.in
MOSTLYCLEANFILES = bpf_filter.c scanner.c grammar.c version.c lex.yy.c \
tokdefs.h version.h os-proto.h \
- stamp-h stamp-h.in
+ stamp-h stamp-h.in $(OBJ_PIC) libpcap.so*
+
+OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=_pic.o) $(CSRC:.c=_pic.o) $(SSRC:.c=_pic.o) $(GENSRC:.c=_pic.o)

HDR = arcnet.h atmuni31.h config.h ethertype.h gencode.h \
llc.h nlpid.h pcap-bpf.h pcap-int.h pcap-namedb.h \
@@ -384,6 +398,9 @@
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
+ $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/
+ ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ)
+ ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY)

uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@@ -411,7 +428,12 @@
-rm -f *.tab.c

.c.o:
- $(COMPILE) -c $<
+ # $(COMPILE) -c $<
+ $(COMPILE) -c -o $@ $(srcdir)/$*.c
+
+%_pic.o: %.c
+ @rm -f $@
+ $(COMPILE) -fPIC $(CFLAGS) -c -o $@ $(srcdir)/$*.c

.c.obj:
$(COMPILE) -c `$(CYGPATH_W) '$<'`
@@ -767,7 +789,7 @@

#all-local:
# rm -f libpcap.a; $(LN_S) .libs/libpcap.a libpcap.a
-all-local: libpcap.a
+all-local: libpcap.a $(SHAREDLIB)

libpcap.a: .libs/libpcap.a
cp .libs/libpcap.a libpcap.a
@@ -792,6 +814,13 @@
yyy:
sh beenthere

+$(SHAREDLIB): $(OBJ_PIC)
+ -@rm -f $@
+ -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ)
+ $(CC) $(CFLAGS_SHARED) -o $(SHAREDLIB) $(OBJ_PIC) -lc
+ ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ)
+ ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY)
+
# generated source
pcap.3.gz: pcap.3
gzip -c < pcap.3 > pcap.3.gz
@@ -800,12 +829,18 @@
rm -f bpf_filter.c
$(LN_S) $(srcdir)/bpf/net/bpf_filter.c bpf_filter.c

+bpf_filter_pic.o: bpf_filter.c
+ $(COMPILE) -fPIC $(CFLAGS) -c bpf_filter.c -o $@
+
scanner.o: scanner.c tokdefs.h

scanner.c: scanner.l tokdefs.h
@rm -f $@
$(V_LEX) -t scanner.l > $$$$.$@; mv $$$$.$@ $@

+scanner_pic.o: scanner.c tokdefs.h
+ $(COMPILE) -fPIC $(CFLAGS) -o $@ -c scanner.c
+
tokdefs.h:
rm -f grammar.c
make grammar.o
@@ -818,6 +853,10 @@
mv y.tab.c grammar.c
mv y.tab.h tokdefs.h

+grammar_pic.o: grammar.c
+ @rm -f $@
+ $(COMPILE) -fPIC $(CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c
+
version.o: version.c

version.c: $(srcdir)/REVISION version.h
@@ -828,6 +867,13 @@
version.h: $(srcdir)/VERSION
@rm -f $@
sed -n -e 's/.*/static const char pcap_version_string[] = "libpcap version &";/p' $(srcdir)/VERSION > $@
+
+version_pic.o: version.c
+ $(COMPILE) -fPIC $(CFLAGS) -c version.c -o $@
+
+pcap-ring_pic.o: version.c
+ $(COMPILE) -fPIC $(CFLAGS) -c pcap-ring.c -o $@
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
# 早い時間の帰宅って嬉しいなぁ....

2008年4月11日金曜日

chroot で SSD & cross compile

OpenMicroServer のクロスコンパイルをするために SSD なるディストリビューションがあるらしく Web を彷徨うと Windows 方々は VMWare-Player 上で。と言うのが多いらしい。カーネルのコンパイルしてファームに組み込み。までしか試していないけど linux ならば。と chroot で試したところ、どうもできたらしい。

# なんて言っているが VMWare や lguest でも試した後の話。

ぷらっとホームさんのドキュメント``OpenMicroServer/OpenBlockS266 のファームウェアのカスタマイズ''を多々参考にしつつ長くなるけど...i386 のバイナリ tgz を揃えた後で
# mkdir SSD
# for i in tmp/*.tgz; do
> tar xzpf $i -C SSD
# done
# pushd SSD/usr/src/dist/distfiles/
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/distfiles/linux-2.6.16.59-004-mips-obs.patch.bz2
....
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/distfiles/linux-2.6.16.59.patch.bz2
....
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/distfiles/linux-mips-2.6.16.tar.bz2
....
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/distfiles/usagi-linux26-stable-20050714-2.6.16.diff.bz2
....
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/distfiles/mtd-snapshot-20060328.tar.bz2
....
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/distfiles/pcmcia-cs-3.2.8.tar.gz
....
# cd ../../distrib/mipsel-obs1550/product/initrd/
# wget -nd ftp://ftp.plathome.co.jp/pub/ssdlinux/0.4-LATEST/mipsel-obs1550/installation/ramdisk.image-product.gz
....
# popd
# chroot SSD
# cd /etc/
# cp mk.conf mk.conf.old
# vi mk.conf
# diff -ub mk.conf.old mk.conf
--- mk.conf.old 2008-04-10 23:29:42.000000000 +0900
+++ mk.conf 2008-04-10 23:30:51.000000000 +0900
@@ -10,19 +10,19 @@
#KERNEL_CONFIG?= /any_dir/my_kernel_config

# Cross Compile for OpenBlockS
-#CROSS_BUILD?= powerpc
-#DESTDIR?= /home/dest-powerpc
-#RELEASEDIR?= /home/release-powerpc
+CROSS_BUILD= mipsel
+DESTDIR= /home/dest/mipsel
+RELEASEDIR= /home/release/mipsel

# OPENBLOCKS 'obs50','obs200','obs266' or 'none'
-OPENBLOCKS?= none
+OPENBLOCKS= obs1550

-HAVE_CVS?= yes
+HAVE_CVS?= no
DEVELOPTOOLS?= yes
USE_PAM?= yes
USE_PCMCIA?= yes
USE_EXT3FS?= yes
-IPV6?= yes
+IPV6?= no
WITH_X11?= no

SSDVERSION= 0.4
# mknod /dev/null c 1 3
# export MACHTYPE
# export HOSTTYPE
# export SHELL
# export PATH=$PATH:/usr/cross/mipsel/bin/
# cd /usr/src/mkdist/mtd
# bmake
....
# cd /usr/src/mkdist/kernel
# bmake
....
# cd /usr/src/mkdist/pcmcia-cs
# bmake
....
ごにょごにょ
# cd /usr/src
# bmake -DNOCLEAN build_kernel
....
# cd /usr/src/distrib/mipsel-obs1550/product/treeboot
# bmake
....
# ls
Makefile System-product.map zImage.initrd.treeboot-product
# exit
# ls -l SSD/usr/src/distrib/mipsel-obs1550/product/treeboot
total 9588
-rw-r--r-- 1 root root 172 Aug 23 2005 Makefile
-rw-r--r-- 1 root root 609544 Apr 11 00:03 System-product.map
-rwxr-xr-x 1 root root 9280780 Apr 11 00:03 zImage.initrd.treeboot-product
気を付ける点としては pcmcia-cs を持ってきておくことと /dev/null 作ること位かしら?

2008年4月10日木曜日

netflow の exporter その 2

Documentation/networking/packet_mmap.txt のサイトはアクセスできず、ここ からソース持ってきてみたものの x86 のみ? で早々にあきらめ。

nprobe って言っているなら気付けよっ。との事で、こちら をありがたく参考しつつ PF_RING に挑戦したが...扱っている量がそーとーなレベルという事に気付く。OpenMicroServer にて nprobe 稼働させてロスしまくっていても flow-capture でひろってみると 5分おきに 6M位 のファイルができてる...

# 参考にさせていただいたところ補足。libpfring でのコンパイルは -fPIC 入れた方が良さげ。
# また libpfring の so は単独ではなく libpcap の README 曰く libpcap 作る時に *.o 加えてあげるらしい。

Cisco コンソール & cu & emacs

普段は emacs にて ``M-x shell'' の後 telnet 使っているけどコンソールは持ち運びできる PC が Windows なので TeraTerm なるものを使っていた。コンソールも emacs から。と同じように shell 起動して
cu --parity=none -s 9600 -l /dev/ttyUSB0
なんてやってみたがウマくない。例のごとく Web をウロウロしていたら Term Mode なるものを発見。``M-x term'' の後で cu してみたところ...おぉ ? でヘルプでるし TAB で補完もされる。``C-j'' ``C-k'' で line mode と char mode の切替が必要になるが、使い慣れた emacs でログは取れるし、コピペもできるし、ちょと嬉し。

2008年3月31日月曜日

netflow の exporter

日本で debian で mipsel って言わずもがな? ぷらっとホームさんの OpenMicroServer(TM) 。で netflow の exporter を探してみたところ、debian パッケージにあったのが fprobe。ulog の方が良さげだけど、自身を通るトラヒックではなくて、promisc モードで取得する必要あり。かつ EBT の nat テーブル PREROUTING で全て取得できるか定かでは無いし、BRIDGE_EBT_ULOG は OBSOLETE だし。

なので素の fprobe を二つ動かして uptime 見たらロードアベレージが、ほぼ 2。2〜 3割落としてしまったいるようなので、どうしようか...考えたのが
  • nprobe (本家じゃない)ソースがどこにあるかわからなかった。ぷらっとホームさんでも配布しているけど未テスト
  • カーネルコンパイルして、やっぱり ebtables を使う
  • PACKET_MMAP を使った libpcap を入れて fprobe で再挑戦
いずれにしても面倒で、クロスコンパイルの環境が必要....

debian でクロスコンパイル 2

続きと言うか、ちょっと jot。Convert library packages で、こんなんならない?
# dpkg-cross -a mipsel -b libc6_2.7-6_mipsel.deb 
Building libc6-mipsel-cross_2.7-6_all.deb
dpkg-cross: building package with dpkg-deb -b failed.
dpkg-cross: conversion of libc6_2.7-6_mipsel.deb failed.
# dpkg-cross --verbose -a mipsel -b libc6_2.7-6_mipsel.deb
Excluding: gcc binutils gpm cpp debianutils xfree86-common libpam-runtime xlibs-data debconf tzdata
Trying to build: libc6_2.7-6_mipsel.deb
Going to convert libc6_2.7-6_mipsel.deb
Extracting libc6_2.7-6_mipsel.deb
Extracting information from control file
Creating destination package tree
Creating /usr/share/doc/libc6-mipsel-cross/README
Installing shlibs file
Creating control file
Creating md5sums file
dpkg-deb: building package `libc6-mipsel-cross' in `./libc6-mipsel-cross_2.7-6_all.deb'.
dpkg-deb: control directory has bad permissions 2755 (must be >=0755 and <=0775)
dpkg-cross: building package with dpkg-deb -b failed.
dpkg-cross: conversion of libc6_2.7-6_mipsel.deb failed.
# ルートで作業するなっ....て....

で悩むことしきり。結局 2755 ってパーミッションどこかで見た覚えが。dpkg-deb を string してみて、適当に。例えばカレントに tmp ってディレクトリ作った後に
# TMPDIR=tmp dpkg-cross -a mipsel -b libc6_2.7-6_mipsel.deb 
sh: tmp/dpkg-cross.0MFJb4nZ/dst/DEBIAN/md5sums: No such file or directory
Building libc6-mipsel-cross_2.7-6_all.deb
/tmp を g+s にするのって流行ではないのかしら?

2008年3月28日金曜日

debian でクロスコンパイル

ってそのままだけど DebianCrossCompilerHowto。以前は toolchain-source だっけ? 覚えておくのは
  • dpkg-cross を入れておくこと
  • binutils を TARGET=... debian/rules binary-cross でビルド
その後は眺めたままだけど...amd64 で i386 を作る場合の TARGET は i486-linux-gnu。で i486-linux-gnu-gcc は
$ cat /usr/bin/i486-linux-gnu-gcc 
#!/bin/sh
gcc -m32 $@
で VMWare 用のカーネルが出来た。

2008年3月27日木曜日

lguest on 2.6.25-rc

どこで見付たか忘れちゃったけど、2.6.25-rc7-git2 には未。
--- old/arch/x86/kernel/tsc_32.c.old    2008-03-27 23:28:27.000000000 +0900
+++ new/arch/x86/kernel/tsc_32.c 2008-03-27 23:29:51.000000000 +0900
@@ -394,13 +394,15 @@
int cpu;

if (!cpu_has_tsc)
- goto out_no_tsc;
+ return;

cpu_khz = calculate_cpu_khz();
tsc_khz = cpu_khz;

- if (!cpu_khz)
- goto out_no_tsc;
+ if (!cpu_khz) {
+ mark_tsc_unstable("could not calculate TSC khz");
+ return;
+ }

printk("Detected %lu.%03lu MHz processor.\n",
(unsigned long)cpu_khz / 1000,
@@ -433,9 +435,4 @@
tsc_enabled = 1;

clocksource_register(&clocksource_tsc);
-
- return;
-
-out_no_tsc:
- setup_clear_cpu_cap(X86_FEATURE_TSC);
}
ぷらっとホームさんの SSD/Linux を lguest で動かすにあたってスワップを加えようかと思ったところ /dev/vdb とか出来ない。udev とか動いていないから?

mknod するにもメジャー、マイナ番号わからない。と悩んでいたら、こんな方法もあった。いや、最初は CONFIG_VIRTIO_BLK=m とかしちゃって調べていたんだけど。/proc/partitions ですか。

2008年3月25日火曜日

VMWare Workstation on 2.6.25-rc

やっぱり web から。any-any-update の 116 展開した後は、この辺りから。書かれている通り vmblock-only が.... iget()read_inode() が良くわからんので通らないけど (私は) 実害なし。でパッチ
diff -ubBr old/vmmon-only/common/task.c new/vmmon-only/common/task.c
--- old/vmmon-only/common/task.c 2007-11-28 19:58:17.000000000 +0900
+++ new/vmmon-only/common/task.c 2008-03-24 22:39:29.000000000 +0900
@@ -25,7 +25,7 @@
* we do not need asm/page.h anymore in this file - not surprising, this
* is common file, yes? And Windows do not have page.h, do they?
*/
-#define _I386_PAGE_H
+#define _ASM_X86_PAGE_H
/* On Linux, must come before any inclusion of asm/page.h --hpreg */
#include "hostKernel.h"
#ifdef linux
diff -ubBr old/vmnet-only/filter.c new/vmnet-only/filter.c
--- old/vmnet-only/filter.c 2007-11-28 19:11:12.000000000 +0900
+++ new/vmnet-only/filter.c 2008-03-24 22:41:08.000000000 +0900
@@ -12,6 +12,11 @@
#include
#include "compat_skbuff.h"
#include
+
+#define NF_IP_LOCAL_OUT NF_INET_LOCAL_OUT
+#define NF_IP_LOCAL_IN NF_INET_LOCAL_IN
+#define NF_IP_POST_ROUTING NF_INET_POST_ROUTING
+
/*
* All this makes sense only if NETFILTER support is configured in our kernel.
*/
diff -ubBr old/vmnet-only/vmnetInt.h new/vmnet-only/vmnetInt.h
--- old/vmnet-only/vmnetInt.h 2007-11-28 19:25:06.000000000 +0900
+++ new/vmnet-only/vmnetInt.h 2008-03-16 21:05:28.000000000 +0900
@@ -78,8 +78,10 @@
*/
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 65)
# define SET_SK_DEAD(_sk, _val) (_sk)->dead = (_val)
-#else
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25)
# define SET_SK_DEAD(_sk, _val) sock_valbool_flag(_sk, SOCK_DEAD, _val)
+#else
+# define SET_SK_DEAD(_sk, _val) sock_set_flag(_sk, SOCK_DEAD)
#endif
あれ? vmnetInt.h はいじった覚えが無いけど....

2008年3月4日火曜日

FreeRadius 〜 EAP/TLS, EAP/TTLS, EAP/PEAP 〜 Linux Debian Etch

フランス語? 全くわからないのですが、面白いものでとりあえず build だけはできました。debian etch の freeraduis ですが ssl は別となっているので、ちょっと試そうか。の都度似たような探しものばかりしていた。が、こちらのサイト が良いさげでした。ありがとうございます。毎度のことながらの勉強不足で、コマンドそのまま。ですが...でパッチを jot。
diff -ubBrN freeradius-1.1.3/debian/control freeradius-1.1.3-ssl/debian/control
--- freeradius-1.1.3/debian/control 2008-03-04 21:36:44.000000000 +0900
+++ freeradius-1.1.3-ssl/debian/control 2008-03-04 21:31:58.000000000 +0900
@@ -1,6 +1,6 @@
Source: freeradius
-Build-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev, libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch (>= 2), libperl-dev, libtool, dpkg-dev (>= 1.13.19)
-Build-Conflicts: libssl-dev
+Build-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev, libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch (>= 2), libperl-dev, libtool, dpkg-dev (>= 1.13.19), libssl-dev
+Build-Conflicts:
Section: net
Priority: optional
Maintainer: Stephen Gran
@@ -66,3 +66,19 @@
Description: set of PHP scripts for administering a FreeRADIUS server
These scripts provide a web-based interface for administering a FreeRADIUS
server which stores authentication information in either SQL or LDAP.
+
+Package: freeradius-eaptls
+Architecture: any
+Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
+Description: eap-tls module for FreeRADIUS server
+ Debian will not provide a binary version of the rlm_eap_tls.so library. This
+ module is required if you want to use EAP/TLS authentication, commonly used
+ for WiFi access points
+
+Package: freeradius-eappeap
+Architecture: any
+Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
+Description: eap-peap module for FreeRADIUS server
+ Debian will not provide a binary version of the rlm_eap_peap.so library. This
+ module is required if you want to use EAP/PEAP authentication, commonly used
+ for WiFi access points
\ No newline at end of file
diff -ubBrN freeradius-1.1.3/debian/freeradius-eappeap.install freeradius-1.1.3-ssl/debian/freeradius-eappeap.install
--- freeradius-1.1.3/debian/freeradius-eappeap.install 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-1.1.3-ssl/debian/freeradius-eappeap.install 2008-03-04 21:56:40.000000000 +0900
@@ -0,0 +1 @@
+usr/lib/freeradius/rlm_eap_peap*.so
diff -ubBrN freeradius-1.1.3/debian/freeradius-eappeap.postinst freeradius-1.1.3-ssl/debian/freeradius-eappeap.postinst
--- freeradius-1.1.3/debian/freeradius-eappeap.postinst 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-1.1.3-ssl/debian/freeradius-eappeap.postinst 2008-03-04 21:56:15.000000000 +0900
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ configure)
+ if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
+ invoke-rc.d freeradius reload
+ else
+ /etc/init.d/freeradius reload
+ fi
+ ;;
+ abort-upgrade)
+ ;;
+ abort-remove)
+ ;;
+ abort-deconfigure)
+ ;;
+esac
+
+#DEBHELPER#
diff -ubBrN freeradius-1.1.3/debian/freeradius-eaptls.install freeradius-1.1.3-ssl/debian/freeradius-eaptls.install
--- freeradius-1.1.3/debian/freeradius-eaptls.install 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-1.1.3-ssl/debian/freeradius-eaptls.install 2008-03-04 21:34:18.000000000 +0900
@@ -0,0 +1 @@
+usr/lib/freeradius/rlm_eap_tls*.so
diff -ubBrN freeradius-1.1.3/debian/freeradius-eaptls.postinst freeradius-1.1.3-ssl/debian/freeradius-eaptls.postinst
--- freeradius-1.1.3/debian/freeradius-eaptls.postinst 1970-01-01 09:00:00.000000000 +0900
+++ freeradius-1.1.3-ssl/debian/freeradius-eaptls.postinst 2008-03-04 21:34:48.000000000 +0900
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ configure)
+ if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
+ invoke-rc.d freeradius restart
+ else
+ /etc/init.d/freeradius restart
+ fi
+ ;;
+ abort-upgrade)
+ ;;
+ abort-remove)
+ ;;
+ abort-deconfigure)
+ ;;
+esac
+
+#DEBHELPER#
diff -ubBrN freeradius-1.1.3/debian/rules freeradius-1.1.3-ssl/debian/rules
--- freeradius-1.1.3/debian/rules 2008-03-04 21:36:44.000000000 +0900
+++ freeradius-1.1.3-ssl/debian/rules 2008-03-04 21:33:21.000000000 +0900
@@ -23,8 +23,10 @@
# You will also need to add a Build-Depends on libssl-dev and libpq-dev
# and remove the Build-Conflicts on libssl-dev
# Finally you need to cat debian/control.postgresql >> debian/control
-buildssl=--without-rlm_eap_peap --without-rlm_eap_tls --without-rlm_eap_ttls --without-rlm_otp --without-rlm_sql_postgresql --without-snmp-modulelist=krb5 ldap sql_mysql sql_iodbc
+# buildssl=--without-rlm_eap_peap --without-rlm_eap_tls --without-rlm_eap_ttls --without-rlm_otp --without-rlm_sql_postgresql --without-snmp
+# modulelist=krb5 ldap sql_mysql sql_iodbc
+buildssl=--without-rlm_otp --without-rlm_sql_postgresql --without-snmp
+modulelist=krb5 ldap sql_mysql sql_iodbc eap_peap eap_tls
#buildssl=--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` --with-rlm_sql_postgresql_include_dir=`pg_config --includedir`
#modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql
freeradius-eaptls_1.1.3-3_i386.deb freeradius-eappeap_1.1.3-3_i386.deb なるものが出来上がり。これらだけ。であれば、元サイトの下の方にアリ。