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
$ 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 のドライバがロードされていないですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20929&forum=10
kernel のアップデートはされていないでしょうか?
$ 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%早くなってた。
最終的にできたライブラリは以下のような感じになった。
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