GeekFactory

int128.hatenablog.com

linux

IX2015とOpenswanでIPsecトンネル

NEC IX2015とAmazon EC2インスタンスをIPsecトンネルモードで接続してみました。ほぼ自分用の備忘録なんですが、不備などご指摘いただけると嬉しいです。IX2015は動的IPのPPPoEに接続されています。EC2側のみ固定IPを確保できるため、IX2015からEC2に向かっ…

keepalivedとハードウェアルータでVRRPを構成する

VRRPはデフォルトゲートウェイの冗長化で多く使われています。LinuxのクラスタミドルであるkeepalivedもVRRPに対応しており、ハードウェアルータと組み合わせることができます。今回はkeepalivedとIX2015でVRRPを構成してみました。といっても特殊な使い方を…

Linux KVMにWindows Server 2008 R2をインストールする

Linux KVMにWindows Server 2008 R2をインストールする際のポイントを紹介します。 virtioドライバを準備する QEMUはe1000などの各種のデバイスをエミュレートしてくれますが、余分なオーバーヘッドが発生します。virtioは仮想I/Oデバイスのフレームワークで…

Gentoo Linuxでvirt-topを使う

いわゆるtopのlibvirt版です。Gentooではebuildが用意されていないので、ソースからビルドします。さくっと入るかと思ったら予想外に手こずりました。 dev-lang/ocaml dev-ml/findlib dev-ml/extlib ocaml-libvirt-0.6.1.0 - ocaml-libvirt OCaml bindings f…

syslog-ngによるログ監視とメール通知

ログ監視はシステムの異常を検知する重要な方法です。外部にサービスを公開すると侵入される可能性がありますし、サービス障害に気づかない可能性もあります。syslog-ngではログに特定のパターンが出現したらメールで通知することが可能です。destinationのp…

TCPカーネルパラメータによる障害復旧時間の短縮

クラスタ構成のサーバでは、障害発生後にクライアントがすぐに復旧しない場合があります。サーバ側がフェイルオーバした後にクライアント側が再接続するまでの時間を短くする方法を紹介します。クライアントからサーバに接続するとソケットはESTABLISHEDにな…

公開SSHサーバの安全性を高める5つの設計

出先からサーバをメンテナンスするには、SSHサーバをインターネットに公開する必要があります。SSHはデフォルトではIDとパスワードだけでログインできてしまうため、狙われやすい侵入経路の一つです。ここではSSHサーバの安全性を高める設計を挙げてみます。…

sshを制限してsftpだけ許可する

ファイル転送用のアカウントでは、sshを制限してsftpのみ許可したい場合があります。ログインシェルを/sbin/nologinに変更すると、sshだけでなくsftpも制限されてしまいます。そのような場合はsshd_configのForceCommandを使います。例えば、 # /etc/ssh/ssh…

KRTV-7131で地アナを録画する

地デジじゃなくて地アナ。KRTV-7131は玄人志向のテレビキャプチャカードです。2006年秋に買ってしばらく使ってませんでしたが、引越しで地アナが受信できるようになったので復活させてみました。マンションをダウングレードしたら地アナが受信できるようにな…

kvmからqemu-kvmに名前が変わった模様

パッケージ名が変更されたようです。 emerge -pv qemu-kvmqemu-kvmにアップデートしたら /usr/bin/kvm がなくなってしまいました。libvirt XMLを変更したくないので、kvmという名のラップシェルを置きました。 #!/bin/sh exec /usr/bin/qemu-system-x86_64 -…

軽量メール送信コマンドnbsmtpを使う

LAN上にメールサーバが立っている場合、ローカルのメール送信にsendmailやPostfixを使うのは重すぎます。SMTPさえ喋れればよいので、ssmtpやnbsmtpを使います。しばらくssmtpを使っていたのですが、Fromに名前が付加される、Toが勝手に書き換えられる、とい…

KVMとlibvirtによるサーバ仮想化の4つのポイント

Linuxの仮想化技術であるKVMが広まりつつあります。昨年の今頃はWindowsゲストが起動しただけで感動してましたが、今や多くのディストリビューションで動くようになりました。デスクトップ内の開発環境として使う場合はオールインワンですぐ使えることが大事…

syslog-ngをmetalog風に使う

以前、システムロガーにmetalogを使っていました。分かりやすいログ配置、分かりやすい設定ファイル、自動ローテーション等の利点があって重宝していましたが、たった一つ欠点がありました。それは他ホストからのsyslogを受信できないことでした。複数のホス…

PAMによる認証の仕組みを調べてみた

/etc/pam.d/system-authが気になって夜も眠れないので調べてみました。この設定ファイルはOS全体の認証*1を司るものです。コンソールでログインするとき、SSHで接続するとき、su(switch user)するときなど、多くの場面で利用されます。/etc/pam.d以下にあ…

/etc/kvm/kvmtap

kvm-ifupはブリッジを勝手に選んでしまうため、シンボリックリンクでブリッジを指定できるスクリプトを書きました。 #!/bin/bash # /etc/kvm/kvmtap: TAP device wrapper for KVM cmd="`basename "$0"`" spec="${cmd#*-}" iface="${spec#*-}" operation="${s…

QEMUの引数からlibvirt XMLを自動生成する

libvirtdでVMを起動するにはドメインXMLファイルが必要ですが、QEMUの引数からXMLファイルを生成する方法を紹介します。まず、QEMUのコマンドラインをテキストファイルに保存します。下記例では見やすくするため改行していますが、すべて1行で書いてください…

物理マシンを仮想マシンに移行する手順のまとめ

Linux KVM(Kernel-based Virtual Machine)の物理マシンを仮想マシンに移行する手順をまとめました。すでにある物理マシンを仮想マシンに移行する場合を考えます。仮想マシンを実行するための環境はハイパーバイザと呼びます。ディストリビューションに依存…

ノートPCで無線LANによるネットワークブート

ディスクを積んでいないノートPCを使い、無線LANによるネットワークブートをやってみました。今回起動したディストリビューションはGentoo Linuxです。11gのためかそこそこ速く、意外と快適に使えています。仕組みはこんな感じになっています。 (1)(2) 最初…

スクリプトによるgpxeの自動起動

起動時にCtrl+Bを押してgpxeコンソールに落ちるのは面倒です。そこで、gpxeのコンパイル時にスクリプトを仕込むことで自動起動が可能です。gpxeのソースコードと同じディレクトリにスクリプトファイル(例:iscsi-boot.gpxe)を作成します。 #!gpxe dhcp net…

iSCSI Targetボリュームはパーティションを切らない方がよい

ボリューム全体をファイルシステムに使った方がよいです。TargetからもInitiatorからも1つのパーティションとして扱えるため、Initiatorで問題が起こった場合にもTargetホストでの対処が容易になります。 パーティションを切らない場合 iSCSI Targetホストの…

initramfs-util

initramfsを操作するユーティリティを書きました。 Create image: geninitramfs <initramfs.gz> [directories]Resolve and copy libraries: geninitramfs -r [--test]Show list contents: geninitramfs -l <initramfs.gz>Extract image: geninitramfs -x <initramfs.gz> http://coderepos.org/share/bro</initramfs.gz></initramfs.gz></initramfs.gz>…

iSCSIを使ってディスクレスPCにUbuntuをインストールする

とりあえずインストーラが動いたのでメモです。気が向いたら空白を埋めます。 gpxeのインストール hpa-tftpのインストール pxe-pdhcpのインストール Ubuntu Netboot Installerの配置 http://ubuntu-ashisuto.ubuntulinux.jp/ubuntu/dists/jaunty/main/instal…

/etc/init.d/pxe-pdhcp

pxe-pdhcpはProxy DHCPサーバーの実装です。Proxy DHCPはPreboot Execution Environment (PXE)というネットワークブートの標準規格を使ってディスクレスコンピュータをネットワークブートする際に使います。 http://d.hatena.ne.jp/viver/20080720/p2 pxe-pd…

カーネルイメージの配置を変えて保守性を向上する

多くのLinuxでは、カーネルイメージは以下の名前で格納されています。 /boot/vmlinuz-2.6.27-gentoo-r8 /boot/System.map-2.6.27-gentoo-r8 /boot/config-2.6.27-gentoo-r8 これだと複数のカーネルイメージを持つとごちゃごちゃして分かりにくい。バージョン…

Listen中にネットワークインタフェースが追加された場合

0.0.0.0でListenしているアプリがある状態で、ネットワークインタフェースが追加された場合、新しいインタフェースへの接続要求はAcceptされるのか?とりあえずLinuxのOpenSSHで試してみたところ、普通にAcceptされました。まあeth1が増えたからといってデー…

RAID1+LVMにルートファイルシステムを置く

RAID1+LVMのボリューム上にルートファイルシステムを置くには、起動時にRAID1ボリュームとLVMボリュームの両方を認識してやる必要があります。そのためにはinitramfsを使います。下記の構成を考えます。 物理ボリューム RAIDボリューム タイプ /dev/sda1 + /…

Apache MPM peruserがSSLで正常に動作しない件

バーチャルホストごとに実行ユーザを変更できるMPMとしてperuserがあります。example.comならwwwpublicで実行、private.example.comならwwwprivareで実行といったことができます。Gentoo Linuxの場合、Apacheにperuserを組み込むには/etc/portage/package.us…

X27Dで始める自宅サーバ(システム設計編)

サーバ構成が落ち着いてきたので、システム設計編としてまとめてみます。12月に書いたエントリの続編になります。 X27Dで始める自宅サーバ(概説) - GeekFactory X27Dで始める自宅サーバ(カーネル構築編) - GeekFactory システム設計の体系はネット上では…

Proxy DHCPによるネットワークブート

一切のストレージを積んでいないPCでOSを起動させる方法。それがネットワークブートです。起動時にHDDやCD-ROMからOSを読み込む代わりに、ネットワークからOSをダウンロードします。最近のPCであればたいていPXEという方式に対応しています。Intel Boot Mana…

パーティションテーブルが壊れたHDDからデータを復旧する方法

本来のパーティションテーブルを書き戻せば復旧できる可能性があります。ddを暴走させてパーティションテーブルを破壊してしまい、ひどい目に遭いました。ターミナルのスクロールログに残っていたテーブルを書き戻したら、後ろのデータは復旧できました。タ…