Posts Tagged ‘linux’

DebianLennyでAR8151のNICを認識させる

3月 2nd, 2012 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

最近のLenovoのノートPCにはAtherosのAR8151っていうNICを積んでいるのだが、Linuxのカーネルは2.6.36以降の対応とのことでLennyで対応するのは大変面倒だったので、ドライバ認識させるまでの手順をメモ。

ターゲットはノートPCでDebianはUSBメモリからNetInstallさせる環境なので、NICが認識できない状況は大変困った。

んじゃ、続きから今回とった手順を。

(続きを読む…)

Tags: , , , , ,

Linux CでUDPのRequest/Responseクライアント通信

2月 16th, 2012 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

自社の製品でUDPを使ってRequest/Responseのデータを返す機器を採用することになったのだが、RequestのSourcePortにResponseを返す作りになっていたので、その時の実装をメモ。

ここここをベースにサンプルを作成。エラー処理も同様に割愛。

要は送受信のsocketを共用にして、bindする前にPortを指定しなければいい話。

サンプルコードは送信は1回だけ。★が今回書きたかったところ。

(続きを読む…)

Tags: , ,

Debian Lennyで挿しっぱなしのUSBメモリをudevとusbmountで自動認識させる

6月 9th, 2011 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

題名の通り。

基本的には


# udevadm trigger

で済むと思っていたのだが、rc.localに入れてもなぜかだめだった。

仕方がないので、cronで定期的にtriggerを叩くようにして、多重にマウントされても困るので、
マウント済みのUSBメモリがあったら、triggerを叩かないようshellに分岐を書いておいた。

何でもないことだけど、1時間近くハマったので一応残しておく。

Tags: , , ,

debian lennyでeclipse Helios

3月 28th, 2011 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

前にlennyをGanymedeを動かしたエントリを書いたけど、同じことしようとしたらミラーが無くてアホみたいにダウンロードに時間がかかっていたので、Heliosを動かすようにした。

大雑把に手順を

  1. SunのJDK6を入れる
  2. # update-alternatives --config java

    でJavaVMの切り替え

  3. HeliosとPleiadesをダウンロード+マージ。iniに
    -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

    を追加

  4. eclipseを起動し、SVNを使うため。作業対象を「http://download.eclipse.org/releases/helios/」にし、「subversive」で検索
  5. 4で引っかかったものを全部インストール
  6. SVNコレクターはSVN Kitを選択
  7. CDTを使うときはgcc、g++とmakeを入れるのを忘れずに(忘れてたw)

あとは色々足りないライブラリ突っ込んでSVNからプロジェクトファイルを落として無事完了できた。

    Tags: , , , ,

    ノートPCのLinuxサーバにおける、内蔵バッテリのUSP利用

    3月 17th, 2011 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

    これまで瞬電や短期間の停電に対してのバックアップ電源として期待して、ノートPCをサーバとして利用してきたが、東電の計画停電下において十分なバッテリー容量を確保できないので、バッテリー容量の低下に合わせて、自動的にシャットダウンする仕組みを導入することにした。

    こちらでまさしくそのものを公開されていたので、ありがたく使わせていただく。
    特にsyslogへの保存は不要だったので、一部改変。

    
    #!/bin/sh
    AC_STATE=`cat /proc/acpi/ac_adapter/AC/state |awk '{ print $2 }'`
    BAT_REM=`cat /proc/acpi/battery/BAT0/state |grep "remaining capacity" |awk '{ print $3 }'`
    LIMIT=400
    if [ $AC_STATE = "on-line" ]; then
    echo "on-line"
    exit 0
    elif [ $AC_STATE = "off-line" -a $BAT_REM -gt $LIMIT ]; then
    echo "discharging: Capacity:$BAT_REM > Limit:$LIMIT"
    exit 0
    else
    /sbin/shutdown -h now
    echo "shutdonw -h now!"
    exit 0
    fi
    exit 0
    

     

    後は、700に権限を変更して、crontab -eでcrondに登録すればおけ。
    テストは帰宅したときにでもやるか・・・

     

    Tags: , ,

    Debian Lennyでcronが動かない!?

    10月 25th, 2010 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

    Linuxの製品として売り出す関係でセットアップの自動化を進めていたのだが、
    そのテスト中どうにもcronで記述した処理が動かない現象にあたった。

    セットアップ手順としては、cronはLennyの基本インストールで勝手に入るので特に操作はせず、
    /var/spool/cron/crontab/rootに予め作っておいたcronの設定ファイルをコピーした。

    下記を実行してもちゃんと中身は存在してる状態である。

    # ps aux | grep cron

    # crontab -l

    いろいろ検索したが全くそれっぽいサイトは見つからず、結局/var/spool下に置くだけじゃ駄目だったと言うわけで、

    # crontab -e

    で開いたら、変更しなくても書き込んで終了する。

    を行って動くようになった。

    なにこの罠orz

    Tags: ,

    unetbootinでdebian lennyのインストールでハマる

    10月 21st, 2010 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

    Netbookをサーバに仕立てるため、debian lennyを入れるのだが、残念ながらCD-ROMドライブがないため、USBメモリからインストールすることになった。

    そこで、unetbooinを使うことにし、USBメモリにイメージを書き込んだがbootしない。まずここでハマる。

    散々悩んだ結果、USBメモリの相性が悪いというダメな結論に達し、USBメモリを交換。無事ブートする。
    こんなのも試したのに・・・

    インストール作業を進め、パーティションの設定で違和感。USBメモリが/dev/sdaにHDDが/dev/sdbになってる・・・。
    ここは冷静に/dev/sdbにファイルシステムを構築し、Grubのインストール先も/dev/sdbにインストールを行う。
    ま、Grubのインストール何も考えずMBRを選択したら、USBに書きに行きやがって、USBのイメージつくり直すはめになったけどなw

    そしてインストール完了。インストール用USBメモリを抜いて、最初のboot…できずorz

    もう解決した後だからサラッと流すけど、そりゃUSBメモリ引っこ抜いてbootさせたらHDDは/dev/sdaになるよね。
    インストールした時点ではGrubのBoot対象はhd1だったから仕方がない。rootをhd0に変更してboot。

    すると、bootが途中で止まる。もちろん原因はsdbがsdaになったこと。
    止まったところでrootにログインして、/etc/fstabにある/bootの/dev/sdbのマウントを/dev/sdaに変える。

    そして、再起動。grubの書き換えって永続じゃないことに気づくorz
    上と同じくrootをhd1からhd0に変更し、boot。

    今度は無事起動完了。
    /boot/grub/menu.lstの中のhd1をhd0に置換して全ての修正完了。

    これまで、インストール時点でHDDの/devの順番が変わることなんてなかったから、
    ティンと来なくて、これだけで4時間くらい使った。疲れた。

    Tags: , , ,

    Web技術者のための大規模サービス技術入門

    7月 29th, 2010 by KUMA | コメントは受け付けていません。 | Filed in 戯言

    Web技術者のための大規模サービス技術入門」をタイトルだけで購入。

    はてなのインターン向けの教材がベースということで、正直とくに目新しいものは見て取れなかった。
    しかしこのレベルをインターンの子がこなせるっていうのは、やっぱり優秀な人が集まる魅力的な会社なんだなぁと。

    社会人向けにどんな本かと説明するなら、スケールとかパフォーマンスとか運用を気にしたこと無い開発者や、運用系の人が開発がきちんと考えて作っているかを判断するために、基本的な知識を得るための本ってあたりかな。
    同じ著者でも前読んだ(けど書評を書くのを忘れていた)「24時間365日サーバ/インフラを支える技術」のほうが、技術的に深いところが書かれており、ある程度経験のあるエンジニアなら後者をおすすめする。

    逆に自分が特に得る物があったと思うのは、具体的な性能指標がかかれていた14章、15章。
    具体的な数値というのは賞味期限が短いが、当時のスペックでどれくらいの性能がでていたかを自前のマシン以外から情報を得られたのは収穫。
    スケールさせる基準や、チューニングの指標にできるからね。

    Tags: ,

    C言語でSNMPの送受信

    7月 14th, 2010 by KUMA | 1 Comment | Filed in 技術メモ

    世の中、SNMP AgentをC言語で実装する記事はあるのだが、SNMPマネージャをC言語で書く記事がないなぁと思って、C言語からコマンドラインのsnmpgetをpopenで呼んだりしてたのだが、オーバーヘッドの大きさに閉口。
    本格的に探したところ、サンプルが公式にあったorz

    公式のサンプルからさらに最低限必要な処理を抽出する。

    #include <net-snmp/net-snmp-config.h>
    #include <net-snmp/net-snmp-includes.h>
    #include <string.h>
    
    int main(int argc, char ** argv)
    {
     struct snmp_session session;
     struct snmp_session *sess_handle;
    
     struct snmp_pdu *pdu;
     struct snmp_pdu *response;
    
     struct variable_list *vars;
    
     oid id_oid[MAX_OID_LEN];
     oid serial_oid[MAX_OID_LEN];
    
     size_t id_len = MAX_OID_LEN;
     size_t serial_len = MAX_OID_LEN;
    
     int status;
    
     /*********************/
    
     init_snmp("SNMP Test");
    
     snmp_sess_init( &session );
     session.version = SNMP_VERSION_1;
     session.community = "public";
     session.community_len = strlen(session.community);
     session.peername = "127.0.0.1";
     sess_handle = snmp_open(&session);
    
     pdu = snmp_pdu_create(SNMP_MSG_GET);
    
     read_objid(".1.3.6.1.2.1.1.1.0", id_oid, &id_len);
     snmp_add_null_var(pdu, id_oid, id_len);
    
     status = snmp_synch_response(sess_handle, pdu, &response);
    
     for(vars = response->variables; vars; vars = vars->next_variable)
     print_value(vars->name, vars->name_length, vars);
    
     snmp_free_pdu(response);
     snmp_close(sess_handle);
    
     return (0);
    }
    

    このサンプル見てておもったのだが、snmp_pdu_create()で返ってきたポインタって、開放してないんだよね。
    requestとsess_handleは開放してるっぽいAPI呼んでるからいいんだけど…

    いろいろグクっても開放しているところが見当たらないから、たぶんsnmp_synch_responseで開放してると思うんだけど、一応ソースコード確認しておくかな・・・

    Tags: , ,

    lighttpdの困った挙動

    6月 14th, 2010 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

    Webサーバをapacheからlighttpdに移行する過程で、httpでリクエストしたコンフィグファイルがちゃんと読めなくなっていた。

    なんでかと思って、WireSharkで拾ってみたところ、Content Typeがapacheでは「text/plain」となっていたところが、lighttpdでは「application/octet-stream」となっており、おまけにおしりに改行コードが追加されていた。

    lighttpdは軽量化のため、拡張子でContent Typeを判断しており、コンフィグファイルを独自の拡張子を使用したため、デフォルトで上記のような挙動となったらしい。

    lighttpd.confのmimetype.assignをいじれば良いことがわかり修正。
    ついでに改行コードの付加程度では動作に影響しないように、コンフィグファイルのReaderの修正もした。

    Tags: ,