まつざきの技術メモ

エンジニアの私的な技術メモです。


コメントする

VAIO Pro 11にDebianをインストール

VAIO Pro 11にDebianをインストールした時のメモ。

手順は以下のとおり。

  1. まずは普通にWheezyをインストール
  2. sidにアップデート
  3. 最新カーネル(3.11-rc2)をビルドしてインストール

 

Wheezyそのままだと無線LANデバイスを認識しませんでした。Intelの7260ってやつが付いてるみたいです。
このブログエントリーによると、最新カーネルの3.11だとモジュールが入っているみたいなので、
今日時点の最新(3.11-rc2)をインストールしました。
カーネルだけ最新にするのもなんかイヤなので、ついでにsidにしています。

上記リンクのブログエントリーでは、Arch Linuxをインストールしていますが、同じ手順でOKです。

  1. 最新firmwareのダウンロード
  2. 最新カーネルソースのダウンロード
  3. intel_pstate.cにパッチを当てる
  4. カーネルコンパイル
  5. 出来上がったカーネルヘッダーとカーネルイメージのdebパッケージをdpkgコマンドでインストール

 

カーネルのコンパイルとインストールはこのブログエントリーを参考にさせてもらいました。
カーネルをコンパイルする時にプロンプトが沢山出て来ましたが、全てデフォルトにしました。

 

2013/07/23追記
Ubuntu 13.10 (Saucy Salamander) Daily Build でも同じように
最新firmwareと最新カーネルをインストールすれば動きました。
Ubuntu 13.10はリリース時にはカーネルが3.11になるようです。


コメントする

GlassFishが付加したExpiresヘッダを上書きする

Apache + GlassFishの環境で稼働中のアプリで、
アプリ内のjsファイルを修正しても、内容がクライアントに反映されなかった件の対応メモ。

GlassFishが静的ファイルにExpiresヘッダを付加するのが原因だったので、
(webapp/resourcesに配置したファイルだけ?)
今回はその前段に配置しているApacheのmod_expiresモジュールで対応しました。

GlassFishで設定出来そうな気がしますが、設定項目を見つけきれませんでした。
ご存知の方がいらっしゃれば教えて下さい><

■バージョン
OS: Scientific Linux 6.3 x86_64
Apache: 2.2.15
GlassFish: 3.1.2.2

■手順
Apacheはyumでインストール済なので、
ビルドしたRPMファイルからモジュールファイルを取り出して差し替えました。

1. 依存パッケージをインストール
2. 作業ディレクトリを作成
3. SRPMをダウンロード
4. mod_expiresのパッチファイルを作成
5. specファイルを修正
6. .rpmmacrosファイルを作成
7. RPMファイルをビルド
8. RPMファイルを解凍して、モジュールファイル「mod_expires.so」を取り出す
9. モジュールファイルを差し替え

SRPMの作成は必ず一般ユーザで行なうようにしてください。

# yum install rpm-build apr-devel apr-util-devel pcre-devel

$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

$ cd ~/rpmbuild/SRPMS

$ yumdownloader --source httpd

$ rpm -ivh httpd-2.2.15-28.sl6.src.rpm

$ cat << EOF > ~/rpmbuild/SOURCES/httpd-2.2.15-mod_expires.patch
--- httpd-2.2.17.orig/modules/metadata/mod_expires.c    2008-11-12 04:59:22.000000000 +0900
+++ httpd-2.2.17/modules/metadata/mod_expires.c 2011-01-20 11:47:03.000000000 +0900
@@ -472,6 +472,11 @@
         expiry = apr_table_get(r->headers_out, "Expires");
         t = r->headers_out;
     }
+    if ( apr_table_get(r->subprocess_env, "override_expires") ) {
+        expiry = NULL;
+        apr_table_unset(t,"Expires");
+        apr_table_unset(t,"Cache-Control");
+    }
     if (expiry == NULL) {
         /*
          * No expiration has been set, so we can apply any managed by
EOF

$ emacs ~/rpmbuild/SPECS/httpd.spec

$ cat << EOF > ~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS
%debug_package %{nil}
EOF

$ rpmbuild -ba ~/rpmbuild/SPECS/httpd.spec

$ cd ~/rpmbuild/RPMS/x86_64/

$ rpm2cpio httpd-2.2.15-28.sl6.x86_64.rpm | cpio -id

 

~/rpmbuild/SPECS/httpd.specとして保存するファイルはここに置いています。
変更箇所は以下です。

$ diff ~/rpmbuild/SPECS/httpd.spec{,.org}
105,108d104
<
< # my patch
< Patch212: httpd-2.2.15-mod_expires.patch
<
261,263d256
< # my patch
< %patch212 -p1 -b .mod_expires
<

 

モジュールのコピーはrootかsudoで行なってください。

# cp -i ~rpmbuilder/rpmbuild/RPMS/x86_64/usr/lib64/httpd/modules/mod_expires.so /usr/lib64/httpd/modules/mod_expires.so

 

あとは、httpd.confに以下のような設定をすればOKです。
この例では、画像のみ1ヶ月キャッシュして、
それ以外はすべてキャッシュしないようにしています。

SetEnv override_expires 1

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/png "access plus 1 months"
    ExpiresByType image/jpeg "access plus 1 months"
    ExpiresByType image/jpg "access plus 1 months"
    ExpiresByType image/gif "access plus 1 months"
    ExpiresDefault A0
</IfModule>

 

以下のブログエントリを参考にさせて頂きました。
ありがとうございますm(_ _)m

@kazeburoさん 
mod_expiresでExpiresとCache-Controlを上書きする
mod_expiresのパッチファイルは@kazeburoさんのそのまま使わせて頂いてます><

@tnmtさん 
いまさら聞けないrpmbuildことはじめ