ラベル システム構築 の投稿を表示しています。 すべての投稿を表示
ラベル システム構築 の投稿を表示しています。 すべての投稿を表示

2015年11月25日水曜日

Ubuntu14.04LTSでCassandra2.2のインストールがコケる件

Cassandraの2.2のインストールマニュアル通りにやってもコケてくれました(2015/11/25現在)。


$ sudo apt-get install dsc22
          :
The following packages have unmet dependencies:
 dsc22 : Depends: cassandra (= 2.2.3) but 3.0.0 is to be installed
E: Unable to correct problems, you have held broken packages.


これは2.1のインストールマニュアルを参考にバージョン指定したら行けました。


$ sudo apt-get install dsc22=2.2.3-1 cassandra=2.2.3
$ sudo apt-get install cassandra-tools=2.2.3


でこの件、2.1の時も同じ問題が起きていたようです。
ドキュメントの不備のようなので、すぐ改善されると思います。

2015年8月28日金曜日

JavaVMがプロセスのMax open filesのソフトリミットを変更する件

JavaVMを起動するとそのプロセスのMax open filesのソフトリミット(soft limit:一般ユーザが変更できる上限値、ulimit -Snで参照可能)をハードリミット(hard limit:rootが変更できる上限値、ulimit -Hnで参照可能)まで引き上げます。

Ubuntu14.04LTSでは一般ユーザのMax open filesは以下のようにソフトリミット1,024、ハードリミット4,096になっています。


$ ps
  PID TTY          TIME CMD
 2447 pts/0    00:00:00 bash
 3766 pts/0    00:00:00 ps
$ cat /proc/2447/limits | grep 'Max open files'
Max open files            1024                 4096                 files   


以下のようなプログラムを作って実行、


$ cat > Test.java
public class Test {
    public static void main(String arvs[]) {
        try {
            while (true)
                Thread.sleep(1000);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
$ javac Test.java
$ java Test


同様に/procの下を確認してみると、両方とも4,096になっています。つまりソフトリミットがハードリミットまで引き上げられています。


$ ps -ef | grep Test
sofnec    4007  2200  0 14:37 pts/13   00:00:00 java Test
sofnec    4030  2447  0 14:37 pts/0    00:00:00 grep --color=auto Test
$ cat /proc/4007/limits | grep 'Max open files'
Max open files            4096                 4096                 files   


この件、古いJavaVMのドキュメントには-XX:MaxFDLimitオプションで説明されていますが(http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html)、最近のLinix版のもの(http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html)にはこのオプションが書かれていません。

ところが、Linux 版のJava8で試したところ、このオプションが使えてしまいました。


$ java -XX:-MaxFDLimit Test


これで起動して別のターミナルで確認すると、以下のようにソフトリミットは変更されていません。


sofnec@cassandra1:~$ ps -ef | grep Test
sofnec    4387  2200  0 14:51 pts/13   00:00:00 java -XX:-MaxFDLimit Test
sofnec    4398  2447  0 14:51 pts/0    00:00:00 grep --color=auto Test
sofnec@cassandra1:~$ cat /proc/4387/limits | grep 'Max open files'
Max open files            1024                 4096                 files


でこの動き、Ubuntu14.04LTSのOpenJDKでも一緒でした。こちらについてはソースレベルで確認された方がいました。

http://stackoverflow.com/questions/30487284/how-and-when-and-where-jvm-change-the-max-open-files-value-of-linux

というわけで最初に書きましたがもう一度。

JavaVMはそのプロセスのMax open filesのソフトリミットをハードリミットまで引き上げますが、-XX:-MaxFDLimitオプションにより無効にできます。

(ドキュメントに書いといてよ...)

2014年5月1日木曜日

CentOS 6.5 カーネル再構築 2.6.32-431.11.2.el6.x86_64編

CentOSのカーネル再構築メモ。
最新のLinuxカーネルで構築し直すんじゃなくて、今動いているシステムのカーネルソースいじって遊ぶぜ的な人向けの手順です。

バージョンによって前提パッケージが違ったり、ソースをダウンロードしてくるところが違ったり面倒だったので、なるべく汎用性ありそうな書き方で。

まずOS自体を最新バージョンにアップデート。

# yum update
# reboot

私がやったとき(2014/04/29)の最新バージョンは2.6.32-431.11.2です。64ビット版です。

続いて開発環境をインストール。これは他サイトからの受け売り。

# yum groupinstall "Development tools"  


で、次にその他の前提パッケージのインストール、ってのがありがちな書き方ですが、その前にソースをダウンロードして、インストールを試みます。ソースの置き場所もその時々で違ったりするので、CentOSのサイトで確認するといいんじゃないかと思います。
2014/04/29時点では、トップ→Get CentOS Linux Now→Need the Source?
とたどって、ソース置き場からとってきました。これを一般ユーザでインストールします。

$ wget http://vault.centos.org/6.5/updates/Source/SPackages/kernel-2.6.32-431.11.2.el6.src.rpm
$ rpm -ivh kernel-2.6.32-431.11.2.el6.src.rpm


で、rpmbuildを動かすと必要な前提パッケージを教えてくれます。 これがバージョンによって違ったりするようなので、違うバージョンの手順を真似るよりはrpmbuildに聞いた方が確実なんじゃないかと。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp kernel.spec --target=x86_64
ビルド対象プラットフォーム: x86_64
ターゲット x86_64 用にビルド中
エラー: ビルド依存性の失敗:
        xmlto は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        asciidoc は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        elfutils-libelf-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        elfutils-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        zlib-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        binutils-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        newt-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        python-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        audit-libs-devel は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        perl(ExtUtils::Embed) は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています
        hmaccalc は kernel-2.6.32-431.11.2.el6.x86_64 に必要とされています


で、これらをインストールします。perl(ExtUtils::Embed)はさすがにクォーテーションで囲まないとエラーになると思います。

# yum install xmlto asciidoc elfutils-libelf-devel elfutils-devel zlib-devel binutils-devel newt-devel python-devel audit-libs-devel "perl(ExtUtils::Embed)" hmaccalc


この後もう一回rpmbuild実行、~/rpmbuild/BUILDの該当バージョンというか、できてるディレクトリの下に行ってmake、インストールします。

$ rpmbuild -bp kernel.spec --target=x86_64
$ cd ~/rpmbuild/BUILD/kernel-2.6.32-431.11.2.el6/linux-2.6.32-431.11.2.el6.x86_64
$ vi Makefile
EXTRAVERSION = -selinux
$ make
# make modules_install
# make install
# reboot

ここではMakefileのEXTRAVERSIONを-selinuxにしています(個人的にSELinuxまわりの研究でやっているので)。
この場合OS起動時eをタイプすることで表示されるブートオプションの画面で、構築したカーネルが2.6.32-selinuxと表示されます。

2014年2月27日木曜日

Ubuntu 13.10 x64 + Hadoop 1.2.1 + Mahout 0.9

Mahout 0.9 のインストールでいろいろ引っかかったのでメモ。

Ubuntu13.10 x64にmahoutユーザでインストール。

ひっかかってた最大の理由はMahout0.9が前提にしているHadoopのバージョンが1.2.1ってことに気づくのが遅かったからでした(Mahout0.9のパッケージの中にlib/hadoop/hadoop-core-1.2.1.jarってのがあった)。

  • sshd準備

# apt-get install openssh-server
$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys


  • IPv6停止(他サイトの受け売り)

# vi /etc/sysctl.conf
(追加)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# reboot


  • JDKインストール

$ tar zxvf jdk-7u51-linux-x64.tar.gz
# mv jdk1.7.0_51 /usr/local
# ln -s /usr/local/jdk1.7.0_51 /usr/local/jdk


  • Hadoopインストール

$ tar zxvf hadoop-1.2.1.tar.gz
# mv hadoop-1.2.1 /usr/local
# ln -s /usr/local/hadoop-1.2.1 /usr/local/hadoop

$ vi /usr/local/hadoop/conf/hadoop-env.sh
(追加)
export JAVA_HOME=/usr/local/jdk

$ vi /usr/local/hadoop/conf/core-site.xml
(追加)
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>

$ vi /usr/local/hadoop/conf/hdfs-site.xml
(追加)
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.name.dir</name>
    <value>/home/hadoop/dfs/name</value>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/home/hadoop/dfs/data</value>
  </property>

$ vi /usr/local/hadoop/conf/mapred-site.xml
(追加)
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
  </property>
  <property>
    <name>mapred.local.dir</name>
    <value>/home/hadoop/mapred</value>
  </property>

hdfs-site.xmlのdfs.name.dir、dfs.data.dirあたりは書いておかないと/tmpの下に作られるため、システムリブートの度に消されてあとでイラっときます。

  • Mahoutインストール

$ tar zxvf mahout-distribution-0.9.tar.gz
# mv mahout-distribution-0.9 /usr/local
# ln -s /usr/local/mahout-distribution-0.9 /usr/local/mahout


  • 環境設定

(追加)
JAVA_HOME=/usr/local/jdk
HADOOP_HOME=/usr/local/hadoop
MAHOUT_HOME=/usr/local/mahout
PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${MAHOUT_HOME}/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
export JAVA_HOME MAHOUT_HOME PATH
$ exit


  • ネームノードフォーマット

$ hadoop namenode -format


  • Hadoop起動

$ start-all.sh
$ jps
4917 JobTracker
4539 NameNode
5105 Jps
4680 DataNode
4832 SecondaryNameNode
5060 TaskTracker

6つ起動しない場合は/usr/local/hadoop/logsの下の*.logを参照。ちょっとしたことで動かなくなったりします。

で、ここでMahoutのサンプル起動しますがエラーになります。

$ cd /usr/local/mahout/examples/bin
$ ./classify-20newsgroups.sh
Please select a number to choose the corresponding task to run
1. cnaivebayes
2. naivebayes
3. sgd
4. clean -- cleans up the work area in /tmp/mahout-work-mahout
Enter your choice : 2
    :
    :
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/mahout-work-mahout/20news-all


いろいろ調べた結果、このサンプルはデータをネットワークからダウンロードしますが、環境変数HADOOP_HOMEが設定されていないとhdfs上にコピーしてくれません。
HADOOPはHADOOP_HOME設定してると「Warning: $HADOOP_HOME is deprecated.」って文句行ってくるのにMahoutのサンプルはそれを前提にしているってオチでした。


$ export HADOOP_HOME=/usr/local/hadoop


すると今度は動きます。


=======================================================
Statistics
-------------------------------------------------------
Kappa                                       0.8753
Accuracy                                   90.3805%
Reliability                                85.7215%
Reliability (standard deviation)            0.2163

14/02/27 13:45:07 INFO driver.MahoutDriver: Program took 18474 ms (Minutes: 0.3079)


まだ不完全なんだなという印象。

2013年11月9日土曜日

Linuxで一つのネットワークインターフェースに複数IPアドレス設定する方法

CentOS6から複数IPアドレス設定の方法か変わったらしい、件で書いた、IPエイリアスを使わない方法はUbuntuでも行けました。しかもGUI上一つしか設定できないように見える8.04で。



# ip addr add 192.168.224.132/24 dev eth0

で設定できて、pingが通りました。ifconfigではやっぱり出て来ません。

全部試したわけじゃないけど、きっとLinux共通なんでしょーねー。
自分が知らなかっただけか。

2013年10月31日木曜日

CentOS6から複数IPアドレス設定の方法が変わったらしい、件

UNIX系OSにおいて、1つの物理ネットワークインターフェースで複数のIPアドレスを使うのに、eth0:0といった仮想?インターフェースを定義して別のアドレスを振る、ってのがここ20年近く使われてきた常套手段だと思いますが、どうも最近のCentOSには別の方法があるようです。

 CentOSでIPアドレスを固定にしようと思いGUIメニューから、システム→設定→ネットワーク接続、でネットワークインターフェースを選択して編集をクリック、IPv4のセッティングタブを開くと、IPアドレスを複数設定できるように見えます。


おそらく最初のIPがeth0に割り当てられ、2つ目がeth0:0、3つ目がeth0:1、と言った具合に続くと予想していました。仕事で複数IP振る必要があったので、早速試してみました。

下のように192.168.100.101と192.168.100.102を設定して、


ifconfigで確認したところ、アドレス192.168.100.102は出てきません。


bash-4.1$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:DC:58:77
          inet addr:192.168.100.101  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fedc:5877/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12297 (12.0 KiB)  TX bytes:3305 (3.2 KiB)
          Interrupt:10 Base address:0xd020

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)


しかし、他のマシンからpingを打つとちゃんと帰ってきます。pingを打ったマシンでarpを見ると、ちゃんと複数IPアドレスが同一MACアドレスにリンクされています。


$ arp -a
? (192.168.100.101) at 8:0:27:dc:58:77 on en1 ifscope [ethernet]
? (192.168.100.102) at 8:0:27:dc:58:77 on en1 ifscope [ethernet]


どゆこと???
(◕‿‿◕)わけがわからないよ。

意図した通りに動いているけど原理がまったくわからない。
「CentOS6+複数IPアドレス」で検索しても、従来の方法しか見つかりませんでしたが、「RedHat6+複数IPアドレス」でようやくこのページにたどり着きました。

RHEL6: ifconfig is obsolete!

このページによると、ifconfigは廃止なんだそうで、今後はip addrを使えってことでした。早速やってみると、


bash-4.1$ ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 08:00:27:dc:58:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.102/24 brd 192.168.100.255 scope global secondary eth0
    inet6 fe80::a00:27ff:fedc:5877/64 scope link
       valid_lft forever preferred_lft forever


でてきました。 どうやら最近のRedHat系OSは1つのインターフェースに仮想インターフェースを追加することなくフツーに複数IPアドレス設定できるようになっているようです。従来のifconfigではこの設定を見ることはできず、ip addrでないと見れない。

設定ファイルの中は、以下の通り2つ目以降のアドレスをIPADDR2等で設定しています。


bash-4.1$ cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.100.101
PREFIX=24
GATEWAY=192.168.100.254
DNS1=192.168.100.254
DOMAIN=burger.jp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Auto eth0"
UUID=e35c20d7-be0a-44e4-bdea-a3f20d6a9165
ONBOOT=yes
IPADDR2=192.168.100.102
PREFIX2=24
HWADDR=08:00:27:DC:58:77
LAST_CONNECT=1383196516


ずいぶん簡単にできるようになりました。が、このリンク先にもある通り、仮想インターフェース方式ならup/downを別にできる(ip addr add/delでできそうなので削除)、webminが複数IPアドレス方式だと認識できない、といったこともあるようなので、用途によってどちらを使うか考える必要があります。Apahce2.2は問題なく動きました。

ためしにこの状態で仮想インターフェースも使えるかやってみました。/etc/sysconfig/network-scripts/ifcfg-eth0:0を以下のように用意します。192.168.100.103を仮想IPアドレスにします。


bash-4.1$ cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.100.103
PREFIX=24
GATEWAY=192.168.100.254
ONBOOT=yes


リブート後ifconfigで確認すると、192.168.100.102は相変わらず出ませんがeth0:0で192.168.100.103が出てきました。


bash-4.1$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:DC:58:77
          inet addr:192.168.100.101  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fedc:5877/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12171 (11.8 KiB)  TX bytes:3221 (3.1 KiB)
          Interrupt:10 Base address:0xd020

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:DC:58:77
          inet addr:192.168.100.103  Bcast:192.168.100.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:10 Base address:0xd020

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)


ip addrはこんなカンジです。


bash-4.1$ ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 08:00:27:dc:58:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.102/24 brd 192.168.100.255 scope global secondary eth0
    inet 192.168.100.103/24 brd 192.168.100.255 scope global secondary eth0:0
    inet6 fe80::a00:27ff:fedc:5877/64 scope link


他のマシンからはすべて問題なくpingが通りました。

2013年7月23日火曜日

VMWare Player上のUbuntu13.04でVMWare Toolsのhgfsのコンパイルがコケる件


VMWare Player上のUbuntu13.04でVMWare Toolsをインストールしようとすると、ホストOSとゲストOSでディレクトリを共有するためのファイルシステムhgfs(Host-Guest Filesystem)のコンパイルに失敗します。


The VMware Host-Guest Filesystem allows for shared folders between the host OS
and the guest OS in a Fusion or Workstation virtual environment.  Do you wish
to enable this feature? [yes]

Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/modconfig-fMqXb3/vmci-only' に入ります
/usr/bin/make -C /lib/modules/3.8.0-23-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
      MODULEBUILDDIR= modules
make[1]: ディレクトリ `/usr/src/linux-headers-3.8.0-23-generic' に入ります
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/linux/driver.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/linux/vmciKernelIf.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciContext.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciDatagram.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciDoorbell.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciDriver.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciEvent.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciHashtable.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciQPair.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciQueuePair.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciResource.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/common/vmciRoute.o
  CC [M]  /tmp/modconfig-fMqXb3/vmci-only/driverLog.o
  LD [M]  /tmp/modconfig-fMqXb3/vmci-only/vmci.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/modconfig-fMqXb3/vmci-only/vmci.mod.o
  LD [M]  /tmp/modconfig-fMqXb3/vmci-only/vmci.ko
make[1]: ディレクトリ `/usr/src/linux-headers-3.8.0-23-generic' から出ます
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
      MODULEBUILDDIR= postbuild
make[1]: ディレクトリ `/tmp/modconfig-fMqXb3/vmci-only' に入ります
make[1]: `postbuild' は更新済みです
make[1]: ディレクトリ `/tmp/modconfig-fMqXb3/vmci-only' から出ます
cp -f vmci.ko ./../vmci.o
make: ディレクトリ `/tmp/modconfig-fMqXb3/vmci-only' から出ます
Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/modconfig-fMqXb3/vmhgfs-only' に入ります
/usr/bin/make -C /lib/modules/3.8.0-23-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
      MODULEBUILDDIR= modules
make[1]: ディレクトリ `/usr/src/linux-headers-3.8.0-23-generic' に入ります
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/backdoor.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/backdoorGcc32.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/bdhandler.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/cpName.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/cpNameLinux.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/cpNameLite.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/dentry.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/dir.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/file.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/filesystem.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/fsutil.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/hgfsBd.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/hgfsEscape.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/hgfsUtil.o
  CC [M]  /tmp/modconfig-fMqXb3/vmhgfs-only/inode.o
/tmp/modconfig-fMqXb3/vmhgfs-only/inode.c: 関数 ‘HgfsTruncatePages’ 内:
/tmp/modconfig-fMqXb3/vmhgfs-only/inode.c:888:4: エラー: 関数 ‘vmtruncate’ の暗黙的な宣言です [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[2]: *** [/tmp/modconfig-fMqXb3/vmhgfs-only/inode.o] エラー 1
make[1]: *** [_module_/tmp/modconfig-fMqXb3/vmhgfs-only] エラー 2
make[1]: ディレクトリ `/usr/src/linux-headers-3.8.0-23-generic' から出ます
make: *** [vmhgfs.ko] エラー 2
make: ディレクトリ `/tmp/modconfig-fMqXb3/vmhgfs-only' から出ます

The filesystem driver (vmhgfs module) is used only for the shared folder
feature. The rest of the software provided by VMware Tools is designed to work
independently of this feature.

If you wish to have the shared folders feature, you can install the driver by
running vmware-config-tools.pl again after making sure that gcc, binutils, make
and the kernel sources for your running kernel are installed on your machine.
These packages are available on your distribution's installation CD.


これネットで検索するとエラーの出た該当行、vmware-tools-distrib/lib/modules/source/vmhgfs.tar内のvmhgfs-only/inode.cの888行目


result = compat_vmtruncate(inode, newSize);





result = 0;


に変えろっていうのが大多数なんですが、ホントにtruncateとかしなくていいのか疑問だったので、調べて見ました。

まずこのcompat_vmtruncateは、vmhgfs-only/shared/compat_mm.hでdefineされていました。


/*
 * In 2.4.10, vmtruncate was changed from returning void to returning int.
 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 10)
#define compat_vmtruncate(inode, size)                                        \
({                                                                            \
   int result = 0;                                                            \
   vmtruncate(inode, size);                                                   \
   result;                                                                    \
})
#else
#define compat_vmtruncate(inode, size) vmtruncate(inode, size)
#endif


カーネルバージョン2.4.10より前ならvoid型をint型に変えて、それ以降ならvmtruncateに書き換えるだけ。で、Ubuntu13.04のカーネルバージョンは3.8.0なんですが、カーネルソースダウンロードしてきて探してもありません。Ubuntu12.10の3.5.0で探してみたらありました。mm/truncate.cに。


/**
 * vmtruncate - unmap mappings "freed" by truncate() syscall
 * @inode: inode of the file used
 * @newsize: file offset to start truncating
 *
 * This function is deprecated and truncate_setsize or truncate_pagecache
 * should be used instead, together with filesystem specific block truncation.
 */
int vmtruncate(struct inode *inode, loff_t newsize)
{
        int error;

        error = inode_newsize_ok(inode, newsize);
        if (error)
                return error;

        truncate_setsize(inode, newsize);
        if (inode->i_op->truncate)
                inode->i_op->truncate(inode);
        return 0;
}


コメントの2ブロック目、ようはもうvmtruncate使うな、ってことのようです。
ちなみにinode->i_op->truncateがあれば呼び出すようになっていますが、3.8.0ではこのメンバはありません。

ということで私なりにですが、バージョン3.8.0より前ならそのまま、それ以降ならcompat_vmtruncateを上記のコードに近い形で置き換える、という方法を取りました。

以下その手順です。


# cd vmware-tools-distrib/lib/modules/source
# tar xf vmhgfs.tar
# vi vmhgfs-only/shared/compat_mm.h


103行目の


#define compat_vmtruncate(inode, size) vmtruncate(inode, size)


を以下のように変更。


#  if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
#     define compat_vmtruncate(inode, size) vmtruncate(inode, size)
#  else
#     define compat_vmtruncate(inode, size)                                   \
({                                                                            \
   int error = inode_newsize_ok(inode, size);                                 \
   if (!error)                                                                \
      truncate_setsize(inode, size);                                          \
   error;                                                                     \
})
#  endif


で、


# tar cf vmhgfs.tar vmhgfs-only
# cd ../../../
# ./vmware-install.pl


なんかWarningでましたが一応コンパイルは通って動くようになりました。


 CC [M]  /tmp/modconfig-z3oAcX/vmhgfs-only/inode.o
/tmp/modconfig-z3oAcX/vmhgfs-only/inode.c: 関数 ‘HgfsPermission’ 内:
/tmp/modconfig-z3oAcX/vmhgfs-only/inode.c:1755:8: 警告: ‘dentry’ はこの関数内初期化されずに使用されるかもしれません [-Wmaybe-uninitialized]
/tmp/modconfig-z3oAcX/vmhgfs-only/inode.c:1813:22: 備考: ‘dentry’ はここで定義されています


当然ですが、ここで紹介した方法によって何が起きても責任は負えませんので。

2013年7月11日木曜日

メモ。iPadとかでdnsだます方法。

Windows7で管理者権限でコマンドプロンプト起動。
> netsh wlan set hostednetwork mode=allow
> netsh wlan set hostednetwork ssid=hogehogeap
> netsh wlan set hostednetwork key=nyarlathotep keyusage=persistent
> netsh wlan start hostednetwork
確認は
> netsh wlan show hostednetwork
停止は
> netsh wlan stop hostednetwork

ローカルエリアネットワークでインターネット接続の共有

Ubuntuで/etc/hostsにだましたいURL入れる。
# dnsmasq

Windows7でDNSを上のUbuntuに変更。
iPadでhogehogeapに接続。

2013年7月6日土曜日

Ubuntu12.10にSELinux

メモ。
# apt-get install selinux
# apt-get install selinux-policy-src
# apt-get install selinux-policy-dev
リブート。

2012年2月19日日曜日

BackTrack 5 R1でGUIログイン

意外とぐぐっても引っかからないのでメモメモ。。。

# apt-get install gdm
# vi /etc/rc.local
 exit 0
 の上に
  /usr/sbin/gdm&
 追加
# reboot

2011年4月28日木曜日

sendmailでGmailみたいに複数アドレス使えるようにする方法

Gmailではメールアドレスのアカウント部分に+(プラス)文字を入れると、それ以降の文字列が無視されて、複数アドレスが使えるっていう機能がある。
つまりhoge@gmail.comっていうアドレスを持っていれば、hoge+moge@gmail.comでもhoge@gmail.comで受け取れるというもの。
例えば、この機能を利用して登録サイト毎にメールアドレスを変えておけば、メールアドレスが漏洩してダイレクトメールが来るようになったときに、どのサイトから漏れたかがわかる。

ってこんなの自宅サーバでも会社でも、とっくの昔にやってたぜってことでその設定方法を紹介しておく。ただし、うちのやり方ではデリミタは+(プラス)ではなく.(ドット)。

/etc/mail/sendmail.cfに次のような行がある。
R$+ < @ $=w . >         $#local $: $1                   regular local name
これは、ホスト/ドメイン名付きのメールアドレスをローカル判定する部分なので、この上に
R$+ . $+ < @ $=w . >            $#local $: $1           regular local name
という行を追加。
あとローカル上でのアカウント部だけの判定部分
R$+                     $#local $: $1                   regular local names
っていう行があるので、同様にこの上に
R$+ . $+                $#local $: $1           regular local names
という行を追加する。
要は「regular local names」ってコメントされている行の上に、パターンに「. $+」を追加したルールを増やせばよい。

で、sendmailを再起動するなりSIGHUPを送るなりすれば、
hoge.moge@hoge.jpもhoge.psn@hoge.jpもhoge@hoge.jpに送られるようになる。

※当然だが、sendmail.mcからsendmail.cfを新たに生成した場合、この修正は上書きされる。

2011年4月2日土曜日

Ubuntu10.10にGNU Prolog1.3.1

今時GNU Prologのインストールなんて「Ubuntuソフトウェアセンター」でバイナリをダウンロードすればいいだけの話だが、昔ながらのUNIXプログラマはソースからコンパイルするのです。

gplc -c --fast-math fd2c.pl
fd2c.pl:215-220: fatal error: exception raised: error(instantiation_error,sort/2)
compilation failed
make[1]: *** [fd2c.o] エラー 1

だめじゃん。orz...

このエラーメッセージそのままコピペしてぐぐったら、すぐにこのページが引っかかった。
http://comments.gmane.org/gmane.comp.gnu.prolog.general/1170

ってことで、
./configure --with-c-flags='-O3 -fomit-frame-pointer -fno-strict-aliasing'
でコンパイルは通る。

2011年3月18日金曜日

RTA55iでPPTPパススルー

もう古い機種だからか、「RTA55i+VPNパススルー」で検索してもなかなか情報がなく、「RTA55i+PPTPパススルー」でようやく参考になるページを見つけた。
http://blog.goo.ne.jp/takuminews/e/b0278679e6c849b8a7c16710e4230dd6
これを参考に、「付加機能」→「ファイアウォール機能」で、「表示インターフェース」を「WANポート(LAN2)」に切り替えて、「静的フィルタの設定」でフィルタ追加。

フィルタ:pass(ログなし)
プロトコル:gre
送信元IPアドレス:PPTP接続先のグローバルアドレス
受信先IPアドレス:内部ローカルアドレス(192.168.100.0/24)
送信元ポート番号、受信先ポート番号:*

フィルタ番号40で追加後、「適用」の「入」にチェックを入れて「静的フィルタと動的フィルタの適用」の「適用」クリック。

ファームウェアのリビジョンは、Rev.4.06.67。

2011年2月24日木曜日

CentOS5.5にmod-chxj_0.12.37

結構ハマったわりにはネット上に情報がないので、書いておく。

前提は、openssl, apacheはソースからコンパイルしたものを使い、それぞれopenssl0.9.8oが/home/opensslに、apache2.2.16が/home/httpdにインストールされている。
あちこちで書かれている前提パッケージはすでにインストール済みとする。

まず引っかかったのは、make。

$ ./configure \
> --with-apache-header=/home/httpd/include \
> --with-apxs=/home/httpd/bin/apxs \
> --with-apr-config=/home/httpd/bin/apr-1-config \
> --with-apu-config=/home/httpd/bin/apu-1-config \
> --with-openssl=/home/openssl


でconfigureするとmakeで、

(cd serf; CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure --enable-shared --with-apr=`dirname /home/httpd/bin/apr-1-config` --with-apr-util=`dirname /home/httpd/bin/apu-1-config` --with-openssl /home/openssl; make)
configure: WARNING: you should use --build, --host, --target
configure: WARNING: invalid host type: /home/openssl
checking for chosen layout... Serf
checking for working mkdir -p... yes
checking build system type... Invalid configuration `/home/openssl': machine `/home/openssl' not recognized
configure: error: /bin/sh build/config.sub /home/openssl failed

なんで/home/opensslでinavlid host typeとか言われるんだ?と思ってよく見てみると、src/serfの下でconfigureやってて、--with-opensslと/home/opensslの間に=がない。
直接src/Makefileの該当個所を変更して、コンパイルは通った。

インストールしてapacheを再起動すると今度は、
# ./apachectl restart
httpd: Syntax error on line 427 of /home/httpd/conf/httpd.conf: Cannot load /home/httpd/modules/mod_chxj.so into server: /home/httpd/modules/mod_chxj.so: undefined symbol: libiconv

0.8.5のインストール手順を参考にしてlibiconvをソースから入れたのがいけなかったらしく、最新はlibiconvは必要ないとのこと。

/usr/local/libの下のlibiconv関係のライブラリ(3つ)削除、/usr/local/includeの下のiconv関係のヘッダ(3つ)削除して、configureからやり直して、起動できた。

2010年11月18日木曜日

ML110G4にUbuntu10.10 alternate

ML110G4にUbuntu10.10日本語REMIXいれてたが、これだとメインメモリ3Gしか使ってないorz。
んで、本家(http://www.ubuntu.com/)から64ビット版持ってきて、日本語環境は別でインストールしようと思ったが、64ビット版はインストール途中でこけるorz。
しゃーないんで、ubuntu-10.10-alternate-amd64.isoでテキストベースで再インストールすることに。

ってこれだとRAID組めるじゃん(゚∀゚)。
をー、メモリ6G認識した。

こんどから、alternateでインストールだな。

2010年11月12日金曜日

ML110G4にGF8400GS-LE256H3


ML100G4をデスクトップ的に使おうとしたが、そのままだと1,024x768でしか使えないんでグラボ買った。

玄人志向のGF8400GS-LE256H3をPCI-Ex8に差して、何の問題もなく動いた。
ubuntu10.10は勝手にボードを認識し、ドライバがインストールされた。

うーむ、快適。

2010年11月11日木曜日

Ubuntu10.10上でVMware Player3.1.2

Ubuntu 10.10上にVMware Player 3.1.2を入れると、起動のたびにVMCI Socketsのコンパイルがこける件。

Ubuntu 10.10では、
[item]->compat_sk_sleep
ってのがダメで、
compat_sk_sleep([item])
に変更する必要があるらしい。

コンパイルを通すためには、
# cd /usr/lib/vmware/modules/source
# tar xvf vsock.tar
# vi vsock-only/linux/af_vsock.c
sk->compat_sk_sleepをcompat_sk_sleep(sk)に変更 x10箇所
listener->compat_sk_sleepをcompat_sk_sleep(listener)に変更 x3箇所
# tar cvf vsock.tar vsock-only
で、VMware再起動で解決。