富士通のPRIMERGYサーバーでCentOSが起動できない

富士通PRIMERGY RX100 S6にCentOSをインストールしようとしたのですが、
CDブートからのインストールまでは進むのですが、それからが進まない。。。

OSインストール後に、サーバーをリブートすると、

「Operating System not found」

というメッセージが表示され、あたかもOSインストールが無かったことにw

そんな場合は次のとおりにやれば解決。

BIOS設定マニュアル

http://manuals.ts.fujitsu.com/file/8786/d2679-b11-bios-en.pdf

今回の設定上の要点としては page:23 の
[SATA RAID Enable] を [Disabled] に設定すれば Non-RAID 対応となり、BIOS起動時にRAIDコンフィギュレーション画面は表示されない。
[SATA AHCI Enable] を [Disabled] に設定すれば SATAドライバは必要ない。IDEモードで動作できる。

ということで、BIOSの画面にて

[SATA RAID Disabled]
[STA AHCI Disabled]

としてCentOSをインストールすればOK。

MySQLでダンプ&リストアをコマンドで実行

Dump & Restore

MySQLでダンプファイルを作成するには、下記のコマンドを打てばOK。

# mysqldump -u root -pmypass target_database > hoge_dump_yyyyMMdd.sql


逆にリストアする時は mysql コマンドを使って、次のようにコマンドを打てば簡単にリストアできます。

# mysql -u root -pmypass target_database < hoge_dump_yyyyMMdd.sql

エラーケースの対応

Can't create table './masters/hoge.frm' 

上記のようなエラーがリストアの最中に流れてしまう場合、InnoDB形式で外部参照キーを定義しているテーブルがあり、ダンプファイルをそのまま流すとテーブル作成に失敗します。

テーブル作成順序はちゃんと守ろうってことですね。

それでも、テーブルを復元せんといかん場合は、リストア時に外部参照キーのチェックを外すことで実現できます。

ダンプファイルの先頭行に以下の記述を追加します。

SET FOREIGN_KEY_CHECKS=0;

この1行を追加することで、リストア可能です。

Apacheのエラー:Could not reliably determine the server’s fully qualified domain name〜とメッセージが出たときの対応

Apacheを起動(再起動)した際に、

httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

というエラーが出る場合がある。

これは、「ServerNameに127.0.0.1を使用した、FQDN(完全に適切なドメイン名)が確定できませんでした。」という意味だそうで、Apache自体は動くのだが、エラーをそのままにしておくのは気持ちが悪いし、あとあと問題を引き起こす可能性が高い。

このエラーは、「/etc/sysconfig/network」、 「/etc/hosts」 にlocalhost以外に自分で設定したホスト名が、Apacheの設定ファイルに定義されていないために発生する。

/etc/sysconfig/network例
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=hoge.altqua.com
/etc/hosts例
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               hoge.altqua.com localhost.localdomain localhost

と書いた場合、/etc/httpd/conf/httpd.conf のServerNameの設定にも次のように書いておく。

/etc/httpd/conf/httpd.conf
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If this is not set to valid DNS name for your host, server-generated
# redirections will not work.  See also the UseCanonicalName directive.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
# You will have to access it by its address anyway, and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80
ServerName hoge.altqua.com:80

ソースからインストールしたApacheにモジュールを後から追加する方法

ソースからインストールしたApacheにモジュールを再起動無しで追加する方法です。

mod_soの確認

Apacheコンパイル時にDSO(mod_so)が組み込まれていないと、この方法では追加できないので、DSOが組み込まれているか以下のコマンドを実行し手確認します。

# /usr/local/apache2/bin/httpd -l

一覧に「mod_so.c」がある事を確認してください。
無い場合は組み込まれていないので、Apacheの再コンパイルが必要です。

インストール(モジュールの追加)

>||
# cd /usr/local/src/httpd-2.2.15/src/modules/
|

上記ディレクトリ内にApache標準モジュールのソースが保存されています。
rewrite module は httpd-2.2.15/modules/mappers にありましたので、その中に移動します。

>||
# cd /usr/local/src/httpd-2.2.15/src/modules/mappers
|

mavenでwarファイルへのパッケージ&Tomcatサーバーへリモートアクセスデプロイ

Maven2ではプロファイルでCargo - Maven2 pluginを使うことによって、デプロイしてその後にサーバーへリモートデプロイすることができます。

これによって、テストサーバー等へのデプロイの手間やミスも減り効率がすごくよくなりますので、プロジェクト初期には設定しておきたいところ。

pom.xmlへの記述
<profiles>
  <!-- コマンドプロンプトから次のコマンドを実行したときのプロファイル "mvn package -P test-release" -->
  <profile>
    <id>test-release</id>
    <activation>
      <!-- デフォルトプロファイル: true -->
      <activeByDefault>false</activeByDefault>
    </activation>
    <properties>
      <maven.test.skip>false</maven.test.skip>
    </properties>
    <build>
      <finalName>ExampleApp</finalName>
      <resources>
        <resource>
          <filtering>true</filtering>
          <directory>src/test-release/resources</directory>
        </resource>
        <resource>
          <filtering>false</filtering>
          <directory>src/main/resources</directory>
        </resource>
      </resources>
      <plugins>  
            <plugin>  
              <groupId>org.codehaus.cargo</groupId>  
              <artifactId>cargo-maven2-plugin</artifactId>  
              <configuration>  
                <configuration>  
                  <properties>  
             <cargo.tomcat.manager.url>http://192.168.0.138:8080/manager</cargo.tomcat.manager.url>
            <cargo.remote.username>admin</cargo.remote.username>
            <cargo.remote.password>admin</cargo.remote.password>
                  </properties>  
                  <type>runtime</type>  
                </configuration>  
                <container>  
                  <containerId>tomcat6x</containerId>  
                  <type>remote</type>  
                </container>  
                <deployer>  
                  <deployables>  
                    <deployable>  
                      <groupId>example.com</groupId>  
                      <artifactId>example</artifactId>  
                      <type>war</type>  
                      <properties>  
                        <context>ExampleApp</context>  
                      </properties>  
                    </deployable>  
                  </deployables>  
                </deployer>  
              </configuration>  
              <executions>  
                <!-- すでにアプリケーションが存在する場合はエラーになるのでundeployする -->  
                <execution>  
                  <id>test-undeploy</id>  
                  <phase>package</phase>  
                  <goals>  
                    <goal>undeploy</goal>  
                  </goals>  
                </execution>  
                <execution>  
                  <id>test-deploy</id>  
                  <phase>package</phase>  
                  <goals>  
                    <goal>deploy</goal>  
                  </goals>  
                </execution>  
              </executions>  
            </plugin>  
          </plugins>  
    </build>
  </profile>
<profiles>
実行

実際に実行するには、次のコマンドをコマンドプロンプトから実行します。

mvn package -P test-release

J2EEアプリでIPアドレスを取得する方法

通常J2EEアプリにてアクセス元のIPアドレスを取得するにはHttpServletRequest#getRemoteAddrで取得できるのだが、環境によっては「0:0:0:0:0:0:0:1」のような IPv6 形式になってしまいます。

これはIPV6が優先して表示されているからだそうで、IPv4 を優先させるには、システムプロパティに java.net.preferIPv4Stack=true を設定する必要があります。

Linuxサーバーで動かしている場合

環境変数に以下を追加

export JAVA_OPTS='-Djava.net.preferIPv4Stack=true'
Eclipseの場合

1.メニューから「Run」-「Run Configurations...」をクリックします。
2.「Run Configurations」ダイアログから、対象となる「Apache Tomcat」の起動設定をクリックします。
3.「Arguments」タブを選択し、「VM arguments」の末尾に-Djava.net.preferIPv4Stack=true を追加します。
4.「Apply」ボタンをクリックします。


http://www.failuresoft.com/report/java_ee/servlet_remoteaddr_ipv4

PHPでフォルダとファイルごとコピー

PHPでフォルダとその中に含まれるファイルを丸ごとコピーしたかったのだが、ググってみると通常のPHPではそんな関数はないようで、Perlとか使ったりしている人が結構いたんだが、ちょい手間でした。

それで、一番手っ取り早い、PHPからLinuxコマンドを直接叩くプログラム実行関数の出番です。

exec("cp -r /from/dir /to/dir");

この際、コピー元のフォルダ&ファイルが「nobby」or 「apache」or「www」(環境による) で、 「cp」コマンドの実行が可能。且つ、コピー先のディレクトリに実行権限がある必要があります。

また、exec関数はセキュリティ上注意することが必要ですので、フォームの内容によって、コマンドの内容を外部から変えられないようにしておく必要ありです。

他にもPHPからコマンドをコールするには次の関数も使えるようです。

system()
exec()
popen()
shell_exec()
paththru()