hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

2011-03-30

Antからmavenを実行するサンプル

参考:

事前準備:上記のサイトからmaven-ant-tasks-2.1.1.jarをダウンロードして${ANT_HOME}/libにコピー。

<?xml version="1.0" encoding="UTF-8"?>
<project name="necs" basedir="." default="help"
    xmlns:artifact="antlib:org.apache.maven.artifact.ant">

  <property file="build.properties"/>
  <property name="maven.local.repo.dir" value="${user.dir}/localRepository"/>

  <target name="help">
    <echo>
      Usage: ant build|help
    </echo>
  </target>

  <artifact:localRepository id="localRepo" path="${maven.local.repo.dir}"/>

  <macrodef name="mvn_clean_install_no_test">
    <attribute name="dir" />
    <sequential>
      <artifact:mvn pom="@{dir}/pom.xml" fork="yes" failonerror="true">
        <localRepository refid="localRepo"/>
        <arg value="-Dmaven.test.skip=true"/>
        <arg value="clean"/>
        <arg value="install"/>
      </artifact:mvn>
    </sequential>
  </macrodef>


  <target name="build">
    <mvn_clean_install_no_test dir="SampleApp" />
  </target>
</project>

artifact:mvnタスクはJavaタスクを継承しているのでfork属性が使えます。-Dname=valueを有効にするためにはforkする必要があるのでfork="true"を指定しています。

2011-03-25

ls -lRの出力に合わせてパーミション設定を行う

ls -lRの出力に合わせてパーミション設定を行うためのスクリプトを作りました。

使い方
./ls-lR_to_chmod.pl < ls-lRの結果 > setperm.sh

ls-lR_to_chmod.plの内容
#!/usr/bin/perl

sub to_chmod_perm_chunk {
   my $perm = shift;
   $perm =~ tr/-//d;
   if ($perm eq '') {
     $perm = '-';
   } elsif ($perm =~ /[ST]$/) {
     $perm =~ tr/ST/st/;
   } elsif ($perm =~ /[st]$/) {
     $perm =~ s/([st])$/x$1/;
   }
   return $perm;
}

sub to_chmod_perm {
  my $perm = shift;
  return 'u=' . to_chmod_perm_chunk(substr($perm, 1, 3)) .
         ',g=' . to_chmod_perm_chunk(substr($perm, 4, 3)) .
         ',o=' . to_chmod_perm_chunk(substr($perm, 7, 3));
}

use constant FIELD_COUNT => 9;
my $dir;
while (<>) {
    chomp;
    if (/^[d-]/) {
        my @fields = split(/\s+/, $_, FIELD_COUNT);
        my $perm = @fields[0];
        my $file = @fields[FIELD_COUNT - 1];
        print 'chmod ' . to_chmod_perm($perm), ' ', $dir . '/' . $file, "\n";
    } elsif (/(.*):$/) {
        $dir = $1;
    }
}

出力されたシェルスクリプトを実行はrootで行ってください。
ls -lRを相対パス指定で実行したときは、出力されたシェルスクリプトを実行するときも同じディレクトリに移動してください。
つまり↓こんな感じです。
sudo -s
cd 【ls -lRを実行したディレクトリ】
sh 【上記で出力したsetperm.shのフルパス】

LinuxのパーミションのSとTの大文字小文字の違い

実験してみたところ実行パーミション(x)がついているときは小文字、ついていないときは大文字になるようです。
sとtについてはLinux Files and File Permissionsを参照。

chmodで指定するときは以下のようにします。
$ chmod o=rxt hoge
$ ls -l hoge
-rw-r--r-t 1 user1 group1 0 Mar 25 11:19 hoge
$ chmod o=rt hoge
$ ls -l hoge
-rw-r--r-T 1 user1 group1 0 Mar 25 11:19 hoge

2011-03-24

antで踏み台サーバ経由でscp

ローカルからリモートにコピー。
<sshsession host="${ladder_host}"
    trust="true"
    username="${username}"
    keyfile="${keyfile}"
    passphrase="${passphrase}" >
    <localtunnel lport="${tunnel_port}" rhost="${target_host}" rport="22"/>
  <sequential>
    <scp trust="true"
        keyfile="${keyfile}"
        passphrase="${passphrase}"
        localFile="hoge2"
        remoteToFile="admin@localhost:hoge2"
        port="${tunnel_port}" />
  </sequential>
</sshsession>
ファイルの更新日時は現在の日時になります。

リモートからローカルにコピー。
<sshsession host="${ladder_host}"
    trust="true"
    username="${username}"
    keyfile="${keyfile}"
    passphrase="${passphrase}" >
  <localtunnel lport="${tunnel_port}" rhost="${target_host}" rport="22"/>
  <sequential>
    <scp trust="true"
        keyfile="${keyfile}"
        passphrase="${passphrase}"
        port="${tunnel_port}"
        remoteFile="${username}@localhost:hoge"
        localToFile="hoge"
        preserveLastModified="true"/>
  </sequential>
</sshsession>
こちら向きはpreserveLastModified="true"を指定すればファイルの更新日時を維持出来ます。

2011-03-23

Firefox4でアドオンの互換性確認を無効化する

参考:Firefox 4(ベータ版)に未アップデートのアドオンを強制インストールする方法 : ライフハッカー[日本版]
Extensions.checkCompatibility - MozillaZine Knowledge Base

  1. URL欄に「about:config」と入力します。
  2. [細心の注意を払って使用する]ボタンを押す。
  3. リストビュー上でポップアップメニューの[新規作成]/[真偽値]を選ぶ。
  4. 設定名に「extensions.checkCompatibility.4.0」、値を「false」にします。
  5. [ツール]/[アドオン]メニューを開き、有効化したくないアドオンがある場合は[無効化]ボタンを押しておきます。
  6. [今すぐ再起動する]リンクをクリックしてFirefoxを再起動します。

あくまで互換性確認を無効にするだけで、アドオンが使用中のFirefoxのバージョンに対応していなければ正常に動作するわけでは無いので注意。お目当てのFireMobileSimulator 1.1.11はFirefox 4.0では表示が崩れて正しくは動かないようです。

2011-03-18

antでsshのサンプル

予め$[ANT_HOME}/libにjsch-0.1.44.jarを置いておく。

build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="ssh_test" basedir="." default="sshtest1">
  <xmlproperty file="deploy.properties.xml"
      keepRoot="false"
      semanticAttributes="true"/>
  <target name="sshtest1">
    <sshexec host="host1.example.com"
        trust="true"
        username="${username}"
        keyfile="${keyfile}"
        passphrase="${passphrase}"
        command="whoami"/>
  </target>
</project>

deploy.properties.xml
<properties>
  <username>you</username>
  <keyfile>${user.home}/.ssh/id_rsa</keyfile>
  <passphrase>your_passpharse</passphrase>
</properties>

ブログ アーカイブ