xen対応のカーネルにしたら、また atrosのNICが繋がらなくなったので、嫌々繋げる

http://d.hatena.ne.jp/moogme/20091031/
のつづき。
kernel を再構築すると、またathros の NICを認識しなくなっていたので、ドライバを入れようとすると

$ make install
Makefile:63: *** Linux kernel source not found. Stop.

( ゚д゚)!

ってでた。原因は

/usr/src/kernels

以下に 2.6.18-164.2.1.el5xen がないようなので、、取ってくる。


現在の状況。

$ uname -r -m
2.6.18-164.2.1.el5xen i686
$ cat /etc/redhat-release
CentOS release 5.4 (Final)

これに合わせたパッケージを、、ぐぐって、取ろうとしたけど、ネットワーク繋がってないんだった。

一度終了して、以前の PAE のカーネルで起動。
で、パッケージを取ってくる。

$ wet http://ftp.riken.jp/Linux/centos/5/updates/i386/RPMS/kernel-xen-devel-2.6.18-164.2.1.el5.i686.rpm


その後 PAE から xenカーネルでまた起動。
取ってきたパッケージインストール

$ sudo rpm -ivh kernel-xen-devel-2.6.18-164.2.1.el5.i686.rpm 
$ ls /usr/src/kernels | grep xen
drwxr-xr-x 19 root root 4096 Nov  1 20:39 2.6.18-164.2.1.el5-xen-i686/
lrwxrwxrwx  1 root root   27 Nov  1 20:39 2.6.18-164.2.1.el5xen-i686 -> 2.6.18-164.2.1.el5-xen-i686/

入った。

ここでやっと atros の NIC をインストール
http://d.hatena.ne.jp/moogme/20091030
サーバの再起動が必要かと思ってたけど、実は必要なくネットに繋がった。

。。後から気づいたけど yum でソースだけ取って来れるのかもしれない。。


蛇足
こっそり Makefile は以下のような修正を行ったけど、必要なかったかも。

--- 47,54 ----
          /usr/src/kernel-headers-$(BUILD_KERNEL) \
          /usr/src/kernel-source-$(BUILD_KERNEL) \
          /usr/src/linux-$($(BUILD_KERNEL) | sed 's/\([0-9]*\.[0-9]*\)\..*/\1/') \
!         /usr/src/linux \
!         /usr/src/kernels/2.6.18-164.2.1.el5-xen-i686/


もう、intel のネットワークボードが欲しい。さすがにめんどい。


参考にさせて頂きました。
http://ameblo.jp/icz/entry-10204736766.html
http://kazmax.zpp.jp/linux/linux.html

[Linux]Xenインストール

本当は KVM を使いたいが、CPUが対応していなかったためXenを使い仮想化を行う。
(KVMを使用するためには、Intel-VT もしくは AMD-V といったハードウェアレベルで仮想化に対応しているCPUを使わないと駄目らしい。。)



Xen の準仮想化に対応している( PAE拡張がある )か確認

$ grep pae /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht m
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht m

完全仮想化に対応していか確認

$ grep -e 'vmx|svm' /proc/cpuinfo

何も出力がないので、対応してない。。

準仮想化に対応していたので Xenカーネルと、Xen インストール。

$ sudo yum install kernel-xen
$ sudo yum groupinstall Virtualization

( またカーネル更新か。。 )


initrd を利用するための設定追加

$ sudo vim /etc/modprobe.conf
alias scsi_hostadapter xenblk

kernel を変更

$ sudo vim /etc/sysconfig/kernel
DEFAULTKERNEL=kernel-xen

デフォルトでxen対応のカーネルで起動するように設定

$ sudo vim /boot/grub/menu.lst 
default=0
title CentOS (2.6.18-164.2.1.el5xen)
    root (hd0,0)
    kernel /xen.gz-2.6.18-164.2.1.el5 dom0_mem=512M
    module /vmlinuz-2.6.18-164.2.1.el5xen ro root=/dev/VolGroup00/LogVol00
    module /initrd-2.6.18-164.2.1.el5xen.img

default=0 にしているのは、xen対応のカーネルが一番上にあるから。
xen の kernel に dom0_mem=512M を追加した。もっと少なくてもいいかも。


再起動

$ sudo shutdown -r now

これができればOK

$ sudo xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     3658     2 r-----     20.7

メモリも512MBになっていた。

$ free -m
             total       used       free     shared    buffers     cached
Mem:           512        310        201          0         16        14

つづく
http://d.hatena.ne.jp/moogme/20091126




参考にさせて頂きました。
http://a01.biz/wiki/index.php?XenCentOS

kernelをアップデートするとサーバに接続できなくなった

サーバの位置を移動させたかったので、一度電源を切り、再度電源を入れると、ネットワークに繋がらなくなっていた。


仕方ないので、直接キーボードとモニタを繋いで、ifconfig をすると NIC が認識されていなかった。
lo だけで eth0 がない。


aliasかなっておもったけど、設定ファイルには記述してあったので。

$ cat /etc/modprobe.conf | grep eth0
alias eth0 atl1e

ネットワークを再起動した。

$ sudo /etc/init.d/network restart
Bringing up interfac etho: device eth0 has different mac address than expected ignoring, ignoring.

( ゚д゚)!

ぐぐった。

状況からすると、NIC のドライバがロードされていないですね。
kernel のアップデートはされていないでしょうか?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20929&forum=10
$ lsmod | grep atl1e

本当だ。 NIC のモジュールがない。


そういえば、以前

$ sudo yum update

で、アップデート対象に kernel が入っているのが見えた。 ちょっと怖いなーと思いつつアップデートを行ったことがある。


以前おこなったのと、同じ手順でNICのドライバをもう一度インストール。
http://d.hatena.ne.jp/moogme/20090615/p2

# cd src
# make install
# insmod atl1e.ko
# lsmod | grep atl1e
atl1e                  41236  0 
# shutdown -h now

しかし、新しい kernel でも athros のドライバはまだ入ってないのか。。。


ちなみに、ドライバはここに置かれるらしい。

$ /bin/ls /lib/modules/2.6.18-164.2.1.el5PAE/kernel/drivers/net | grep atl1e
atl1e

思いっきりカーネルごとに違うディレクトリだった。


同じことが起こらないように kernel のアップデートは明示的にやりたい。とりあえず yum update で kernel は対象外にした。

$ sudo vim /etc/yum.conf
exclude=kernel*


参考にさせて頂きました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20929&forum=10
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/781noupdateyum.html

小さい画像をbase64をかけてhtml内に埋め込み

おいしいアンテナは表示速度が遅いです。
原因の1つが、沢山画像を使っていることだった。

画像自体はキャッシュしているが、更新がないか確認するためのアクセスが足を引っ張っている様子。
なので、そのアクセスを無くすために、小さい画像はhtml内に埋め込むことにした。


今まで画像はこのように書いていたが、

<img src="http://hogehoge.jp/hoge.png">


画像をbase64エンコードすると、以下のように書けるらしい。

<img src="data:image/png;base64,iVBORw0KGgo....">


この施策で40アクセスくらいは減らすことができた。
計測してみるとだいたい30%早くなってた。




最終的にできたライブラリは以下のような感じになった。

画像のURLを渡すと、base64エンコードした

data:image/png;base64,iVBORw0KGgo....

のような文字列が返る。もし、ライブラリの中で失敗したら、渡された画像のURLをそのまま返す感じ。
あと、APC使ってキャッシュしている。
file cache(自作)も使っていて、apacheが再起動すると、file cache から拾いだして apc にコピーするようにした。



メモ

画像を base64エンコード

<?php
$img = file_get_contents( 'http://hogehoge.jp/hoge.png' );
if ( $img !== false ) {
    $img = base64_encode( $img );
}
?>

画像の種類を判別

exif_imagetype() という便利な関数があった。
とりあえず、 gif, jpg, png があればいいので、以下のように使ってみた。

<?php
...
    static protected function getDataType( $img_link ) { 
        switch( exif_imagetype( $img_link ) ) { 
            case IMAGETYPE_GIF      : $res = "gif"; break;
            case IMAGETYPE_JPEG     : $res = "jpg"; break;
            case IMAGETYPE_PNG      : $res = "png"; break;
//          case IMAGETYPE_SWF      : $res = ""; break;
//          case IMAGETYPE_PSD      : $res = ""; break;
//          case IMAGETYPE_BMP      : $res = ""; break;
//          case IMAGETYPE_TIFF_II  : $res = ""; break;
//          case IMAGETYPE_TIFF_MM  : $res = ""; break;
//          case IMAGETYPE_JPC      : $res = ""; break;
//          case IMAGETYPE_JP2      : $res = ""; break;
//          case IMAGETYPE_JPX      : $res = ""; break;
//          case IMAGETYPE_JB2      : $res = ""; break;
//          case IMAGETYPE_SWC      : $res = ""; break;
//          case IMAGETYPE_IFF      : $res = ""; break;
//          case IMAGETYPE_WBMP     : $res = ""; break;
//          case IMAGETYPE_XBM      : $res = ""; break;
            default : $res = false;
        }
        return $res;
    }
?>



参考にさせて頂きました。
http://paranoids.sakura.ne.jp/kaworu/2008-04-06-1.php

リンクをアイコン化

これまで、モバイルのようなリンクが並んでいるだけだったが、これをアイコンっぽく変更した。
あと、長い記事、短い記事、Myのソート機能はモバイル向けに作ったものなので、PC版はこれらを削ってシンプルにした。
でも、復活するかもしれない。。



改修前



改修後





改修時に調べたこととか

cssで一部の未訪問、訪問済のリンク色を変更

a:link 未訪問
a:visited 訪問済

サンプル

未訪問のリンク色を赤色に
a:link {
    color:red
}
訪問済のリンク色を青色に
a:visited {
    color:blue
}

で、

<a href="http://hogehoge">hoge</a>

のリンク色が変更されるらしい。

でも、この書き方は、ページ全体の色が変わるので、一部だけ変更したいときは

未訪問の hoge_linkだけを赤色に
a.hoge_link:link {
    color:red;
}
訪問済みの hog_link だけを青色に
a.hoge_link:visited {
    color:blue;
}

として、

<a href="http://hogehoge" class="hoge_link">hoge</a>

とすると、この hoge_link の色だけが変更される。



divタグでアイコンのようなリンクを作る。

おいしいアンテナのリンクは画像で作ると、変更があったときなど作り直すのがめんどくさいので、divタグで囲んでつくった。

こんな感じ。

<a class="icon_link" href="http://a.moog.me/oishii/?sort=newface" ><div class="icon_block"><div class="icon_inner_block"> 新着順 </div></div></a>

divタグを aタグで挟むと、そのブロック自体がリンクになった。
画像でもできるから、よく考えれば当たり前だけど、、知らなかった。



参考にさせて頂きました。
http://www.shoshinsha.com/hp/ref/css/link_color.html

HOTをバージョンアップ

今まで(といっても昨日まで、、)のhotはPC版の各ページに4件だけ表示していたが、これをバージョンアップさせた。






ピックアップしてるとこ

  • hot -> HOT に名前変更
  • 4件から 8件に。
  • 表示件数は増えたけど、場所を取らないようにスクロールできるようにした。






専用ページ(PC)

  • 上位4件のピックアップだけではなく、HOT専用ページを作った。








専用ページ(モバイル)

  • モバイルにも対応した。



ピンクで一杯や、、