特定ディレクトリ以下のファイル数を調べる

あるディレクトリ内のファイル+ディレクトリ数
ls | wc -w

あるディレクトリ以下のファイル数合計
ls -laR | grep -c '^-'

あるディレクトリ以下のディレクトリ数合計
ls -laR | egrep -c '^d.+[^.]$'

 ※UNIXコマンド ファイル数関係 | kuwattel,のサイトから引用。

HDDの増設による設定

家のサーバはファイルサーバとしても活用しています。
今まで1TBをsambaで共有していて、空き容量が無くなってきたのと、ミラーリングも何もしていないので、ものすごく信頼性に欠けるものとなっていました。恐ろしい。

そこで、信頼性UP+HDD容量UPを図るため、以下の品物をゲットしてきました。

合計 2.8万円くらい
 4TBで、ミラーリング付きと考えると、結構安く買えたと思います。

裸族の二世帯住宅 にはeSATAケーブルが付いていて、SATA接続が可能なのですが、
生憎増設するサーバが古くてSATAには対応していません。そのためUSB接続にします。
また、裸族の二世帯住宅とHDDの組み立てまでの説明は省きます。

HDDを起動時にマウントさせる

PCに裸族の二世帯住宅を接続した状態で、

$ sudo fdisk -l
...
ディスク /dev/sdb: 2000.4 GB, 2000398934016 バイト
...

といった感じに出力されるので、割り当てられたデバイスは /dev/sdb となっていることがわかります。
フォーマットするツールは何でも良いので、(私はpartedを使用しました)「GPT、ext4パーティション分割なし」でフォーマットしました。

次に

$ sudo e2label /dev/sdb1 /hddisk4

として /dev/sdb1 を ラベル名/hddisk4 に割り当てます。

また、マウントポイントを作成しておきます。

$ sudo mkdir /mnt/hddisk4

起動時にfsckを行わないようにします。

$ sudo tune2fs -c 1024 /dev/sdb1 
$ sudo tune2fs -i 0 /dev/sdb1 

上記は、マウント回数1024回、あるいは前回のfsckから0日(無期限)の場合fsck行うという意味です。

そうしたら、

$ sudo vi /etc/fstab 

でファイルを開き、下記を追記します。

LABEL=/hddisk4  /mnt/hddisk4    ext4    relatime        0       2

LABEL=/hddisk4  /mnt/hddisk4    ext4    defaults        0       2

ここまで出来たら、再起動して dfコマンドを叩き、マウントできているか確認します。

sambaで共有設定をする

webminを使用して設定しているので、ディレクトリ共有を参考に設定をします。

一部注意なのが、共有したフォルダの中で、フォルダを作ってしまうと作成したユーザの権限となり
フォルダ下のファイルについて変更ができなくなってしまいます。
ここでsambaの共有ディレクトリのアクセス権問題に上がっていますが、
/etc/samba/smb.conf の共有フォルダに対して

inherit permissions = yes

を記入することで、ディレクトリ作成時に上位フォルダの属性で作成されるため、解決できるようです。

2010/11/3 P.S.

  • fstabのオプションをrelatimeからdefaultsに変更しました。こちらの方が転送速度が4MB程早くなりました。
  • 起動時にfsckを行わないようにしました。

Ubuntu 10.04 LTS へ VNCServer を入れる

せっかくUbuntuサーバへGUI環境をいれたので、VNC接続ができるように設定をしました。
簡単にメモしておきます。

VNCクライアントからユーザ権限で直接アクセスする場合

vncserverをインストールする。

$ sudo aptitude install vnc4server

vncserverを起動する。(display=1 5901/tcp を開く場合)

$ vncserver :1

初回起動の場合は、vnc接続の際のパスワードを求められるので、入力します。
※あとで変更したい場合は、vncpasswdコマンドを使用します。


スタート用のシェルのリンクを作成します。このファイルはVNCサーバを起動したときに作成されますが、
デフォルトだと、いつも使っているウィンドウマネージャーで起動せず、ショボイものとなってしまいます。
そのため、書き換えます。

$ cd ~/.vnc/
$ cp xstartup xstartup.org
$ ln -s /etc/X11/Xsession xstartup

これでいつも使っているデスクトップ環境が起動されるようになります。


また、iptablesを利用している場合は、vncserverのポートを開ける必要があります。
例えば、192.168.11.0/24にアクセスを許可する場合は次のようにします。

$ iptables -A INPUT -p tcp -s 192.168.11.0/24 --dport 5901 -j ACCEPT


クライアントにインストールされているvncviewerを使用して接続します。
OSXの場合は、「chicken of the vnc」というフリーなvncviewerがあるのでこれを使うと良いと思います。
Chicken of the VNC download | SourceForge.net

ホスト名、ディスプレイ番号、パスワードを入力して接続をします。
vncserverとの接続を切っても勝手にサーバは落ちないので、必要がなくなったらサーバを落としておきます。

$ vncserver -kill :1

ただ、この設定だと、事前にvncserverを起動しておく必要があるのと、自由にユーザを切り替えて接続ができません。
次に説明する方法であれば、直接ログイン画面からアクセスできるので、自由にユーザを選択しての起動が可能になります。

VNCクライアントから直接ログインする場合

vncserver, xinetdをインストールします。

$ sudo aptitude install vnc4server xinetd 

次に、パスワードファイルを作成します。

$ sudo vncpasswd /etc/passwd_vnc 
$ chown nobody:tty /etc/passwd_vnc


次に設定ファイルを新規作成します。

sudo vi /etc/xinetd.d/xvnc

内容:

service xvnc
{
        disable = no
        socket_type = stream
        wait = no
        user = nobody
        group = tty
        server = /usr/bin/Xvnc
        server_args = -inetd -geometry 1024x768 -depth 24 -query localhost -once -PasswordFile=/etc/passwd_vnc
        port = 5900
}

※ server_args行の-geometry、-depth、port 行は適宜変更して下さい


使用するポートを設定するために、「/etc/services」を編集します。ファイルの最後に下記を追記します。

$ sudo vi /etc/services

追記する内容:

xvnc            5900/tcp                        # VNC Server


gdmの設定を変更します。

$ sudo vi /etc/gdm/gdm.schema
  1. の行になるように変更します。
--- gdm.schemas.org	2010-08-11 00:12:50.000000000 +0900
+++ gdm.schemas	2010-08-11 00:13:42.000000000 +0900
@@ -63,7 +63,7 @@
     <schema>
       <key>security/DisallowTCP</key>
       <signature>b</signature>
-      <default>true</default>
+      <default>false</default>
     </schema>
 
     <schema>
@@ -87,7 +87,7 @@
     <schema>
       <key>xdmcp/Enable</key>
       <signature>b</signature>
-      <default>false</default>
+      <default>true</default>
     </schema>
 
     <schema>


custom.confを変更します。

$ sudo vi /etc/gdm/custom.conf

内容:

[daemon]
RemoteGreeter=/usr/lib/gdm/gdm-simple-greeter

[security]
DisallowTCP=false
AllowRemoteRoot=false

[xdmcp]
Enable=true
DisplaysPerHost=2

[gui]

[greeter]

[chooser]

[debug]

[servers]

最後に、xinetd, gdmを再起動します。

$ /etc/init.d/xinetd restart
$ /etc/init.d/gdm restart
参考サイト

P.S.
再起動したタイミングかわかりませんが、VNCクライントで接続しても、ログイン画面が表示されなくなってしまいました。
どうもバグのようなことが騒がれていますが、よくわかりません。あまりGUIで接続する用途がないので、そのままにしておきます…

[Linux][Ubuntu][サーバ] サーバの状態監視ツール munin のインストール

メモリ使用量やHDDの使用量などを記録して、視覚化してくれると便利だなと思い、サーバの状態を監視するツール「munin」を
インストールしてみました。muninは他の監視ツールに比べて、設定が手軽のようです。

インストール環境:Ubuntu 10.04LTS

最初にmuninのインストールをします。

$ sudo aptitude install munin

※必要に応じて「munin-plugins-extra」をインストールしてください。

muninユーザ用のhomeディレクトリを作成します。

sudo mkdir /home/munin/
sudo chown munin:munin /home/munin/

ベーシック認証用のパスワードを設定します。
.htpasswd生成ツールhtpasswdファイル生成(作成)でパスワードを入力して、
暗号化された文字列を生成します。

sudo -u munin vi /home/munin/.htpasswd

munin:******
と記入します。(*のところに先程生成したパスワードを入力する)


muninの設定をします。

sudo cp /etc/munin/munin.conf /etc/munin/munin.conf.org
sudo vi /etc/munin/munin.conf

(1) 生成されるHTMLファイルの出力先の変更をします。下記を追記します。
htmldir /home/munin
(2) ホスト名の変更をします。ここで指定した名前で管理画面に表示されるようになります。
[localhost] → [hogehoge.jp]


Apacheの設定をします。

sudo cp /etc/munin/apache.conf /etc/munin/apache.conf.org
sudo vi /etc/apache2/conf.d/munin

下記のように書き直します。

Alias /munin/cgi/ /home/munin/cgi/
<Directory /home/munin/cgi/>
        Order allow,deny
        # Allow from localhost 127.0.0.0/8 ::1
        Options ExecCGI
        deny from all

        # This file can be used as a .htaccess file, or a part of your apache
        # config file.
        #
        # For the .htaccess file option to work the munin www directory
        # (/var/cache/munin/www) must have "AllowOverride all" or something
        # close to that set.
        #

        AuthUserFile /home/munin/.htpasswd
        AuthName "munin"
        AuthType Basic
        require valid-user
        Satisfy Any

        # This next part requires mod_expires to be enabled.
        #

        # Set the default expiration time for files to 5 minutes 10 seconds from
        # their creation (modification) time.  There are probably new files by
        # that time.
        #

    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault M310
    </IfModule>

</Directory>

Alias /munin/ /home/munin/
<Directory /home/munin/>
        Options None
        order deny,allow
        deny from all
        AuthType Basic
        AuthUserFile /home/munin/.htpasswd
        AuthName "munin"
        require valid-user
        Satisfy Any
</Directory>

muninの再起動をします。

sudo /etc/init.d/munin-node restart

ただ、これで(デフォルトで)5分後に、 http://hogehoge.jp/munin にアクセスすると
ホスト名で設定した名前の項目が表示される筈なのですが、何も表示されませんでした。

よくわかっていないのですが、

sudo -u munin /usr/bin/munin-cron

として手動で実行したら、表示されて、それ以降も自動で更新されるようになりました。

[Linux][Ubuntu][サーバ] Ubuntu8.04LTSから10.04LTSへアップグレードする

家のサーバは、Ubuntu 8.04LTSを使用していたのですが、この休みを機に、10.04LTSへアップグレードしたので、簡単に手順を纏めておきます。

基本は、下記に記載されている通り行えば問題ないです。
https://wiki.ubuntulinux.jp/UbuntuTips/Install/UpgradeLucid

まずは、最新の環境へアップデートしておきます。

$ sudo aptitude update
$ sudo aptitude dist-upgrade

アップグレードには、GUI環境と、update-managerが必要なので、インストールします。

$ sudo aptitude install ubuntu-desktop update-manager

一旦再起動します。

$ sudo reboot

再起動後、gnome環境を起動して

  1. Alt+F2を押して、update-manager --devel-releaseと入力します。Notes: LTS Upgradeに限り、-d/--devel-releaseオプションが必要です。
  2. 再チェックボタンをクリックして新しいアップデートを確認します。
  3. インストールすべきアップデートがあれば、アップデートをインストールするボタンを使ってパッケージをアップデートし、アップデートが終わった後に再び再チェックボタンを押します。
  4. 新しいリリースが利用できる事を通知するメッセージが現れます。
  5. アップグレードをクリックします。
  6. 画面に表示される手順に従ってください。

と進めます。
ただ、そのまま進めると、下記エラーが発生してアップグレードが失敗してしまいます。

Could not install upgrades

Error during commit
'E:Couldn't configure pre-depend jre for openoffice.org-writer2latex, probably a dependency cycle.'
Restoring original system state

どうも他でも起きている問題のようで、下記に上がっています。
http://georgia.ubuntuforums.org/showthread.php?p=9205771

問題のパッケージを削除して、再度アップグレードを行ないます。

$ sudo aptitude remove openoffice.org-writer2latex

上記問題の他に、私の環境では、

An error occurred while loading or saving configuration information for evolution-alarm-notify. So
me of your configuration settings may not work properly.
Adding client to server's list failed, CORBA error: IDL:omg.org/CORBA/COMM_FAILURE:1.0

といったエラーが出ましたが、問題にならなそうなのでそのままにしました。

アップグレードには、CPU:2.66GHz (Celeron D) メモリ:512MB で2時間弱掛かりました。

アップグレード完了後、再起動を促されるので再起動します。

$ sudo reboot

また、Japanese Teamのリポジトリを有効にしておいた良いので、

wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/lucid.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt-get update

とします。

gnomeのメニュー等が日本語化されていなかったので、日本語パッケージを入れます。

$ sudo aptitude install ubuntu-desktop-ja

ここまでで、アップグレードは完了です。

P.S.

Lucid Lynx 10.04 LTS 2010年4月29日 2013年4月(デスクトップ)2015年4月(サーバ)

Hardy Heron 8.04 LTS |2008年4月24日 |2011年4月(デスクトップ)2013年4月(サーバ)

Common Lisp環境をWindows上に構築する 〜ポータブルな環境を作成〜

ぜんぜんブログ更新出来てなかったですが、(twitterの方では呟いていましたが)最近Common Lispにはまっています。
Common lispは、人工知能用言語で何ができるんだって最初は思っていましたが、AIとか関係なくっていろいろと他にも応用できる便利な言語のようです。。最近は括弧にも抗体が出来て気にならなくなりました。

さて、今回はそんなCommon Lispを活用していく為、実行環境をWindows上に構築しようと思います。ただ、LinuxMacOSX上では、パッケージ管理システムがあるので、CommonLisp環境を構築するのはとても簡単なのですが、Windowsでは結構めんどうです。

実際、Lispboxがあるのでそれ使えばいいと思われる方がいるかもしれませんが、SBCLやClozureCLに初期設定では対応していなかったり、日本語設定がされていなかったり、今主流のclbuildが入っていなかったりと、本格的に使用するにはいろいろと設定を行う必要があります。
 ※Lispboxとは実践CommonLispの作者さんが公開されているCommon Lispの環境一式が詰まったパッケージのことです。リンクはここ

googleで検索してもLispbox以外に纏まった環境をリリースしてくれているところは無さそうなので、それなら自分で作ってしまえってことで、下記を満たすような環境を構築することにしました。

  • CLの知識がない状態でも、実行環境を構築することができる。
    • CLをこれから学び始める人でも環境を構築できる。
  • 複数のCL実装を組み込み、マルチバイトコードの設定が施されている
    • それぞれ特徴のあるCL実装をすぐに試すことができ、日本語を含むマルチバイト(UTF-8)の設定が既に行われた状態なため、設定いらず。
  • 開発環境(Meadow + SLIME)を組み込み、基本設定済み。
    • CLの開発環境であるSLIMEの設定が既に行っている状態なため即、プログラミングを始められる。
  • asdf-install、clbuildによるライブラリのインストールができる
    • asdf-installはもちろん、今主流?のclbuildも組み込んでいるのでライブラリを簡単にインストールできる。
  • Meadowからbashを使用することができ、Meadow上で全て完結できる。
    • Cygwinを組み、Meadow上でUnix系コマンドを使うことができる。
  • セットアップの所要時間は10分以下になるようにする。(主観)
    • 面倒なことは最小限に。

また、他のPCでも使用できるようにこの環境をパッケージ化しました。これから、CommonLispを試したいけど、VirtualBox入れて、Linux入れてはだるいし、今すぐに試したい!っというWindowsユーザーは使ってみるといいかもしれません。

下記に置いていますので、使ってみたい方はどうぞ。
http://www.mediafire.com/zqwell

インストール方法

同封のReadme.txtに記載していますが、こちらにも書いておきます。
インストール手順は下記4ステップまでありますので順に行ってください。

(1) ALICE.exeをダブルクリックして解凍された「ALICE」ディレクトリを「C:\」を置きます。

(2) 下記の環境変数を作成します。

環境変数の追加方法:
マイコンピュータ右クリック > 詳細設定タブ > 環境変数 > ユーザーの環境変数

環境変数名:「ALICEDIR」
変数値 :「C:\ALICE\」
※変数値のパスの最後には必ず「\」をつけるようにしてください。

(3) Cygwinの設定を行います。
C:\ALICE\Terminal.bat を実行すると、下記メッセージが出ますので、

Your group is currently "mkgroup".  This indicates that neither
your gid nor your pgsid (primary group associated with your SID)
is in /etc/group.

The /etc/group (and possibly /etc/passwd) files should be rebuilt.
See the man pages for mkpasswd and mkgroup then, for example, run

mkpasswd -l [-d] > /etc/passwd
mkgroup  -l [-d] > /etc/group

Note that the -d switch is necessary for domain users.

下記のように入力します。

$ mkpasswd -l  > /etc/passwd
$ mkgroup  -l  > /etc/group

そうしたら、ターミナルを終了して、再度Terminal.batを実行し

ユーザー名@PC名 ~
$

と表示されていれば、Cygwinの設定は完了です。


(4) 次に開発エディタであるMeadowの設定です。
MeadowのHOMEディレクトリを「C:\ALICE\cygwin\home\lisper」に設定するため、
C:\ALICE\meadow\install.exe を実行してください。

そうするとHOMEディレクトリ先を問われるので、

「C:\ALICE\cygwin\home\lisper」

と入力します。
ここまでで、設定は全て完了です。

使用方法

1. C:\ALICE\Meadow3 を実行しMeadowを立ち上げる
2. M-x clisp-start を行うとSLIMEが立ち上がる

同様に、SBCL, Clozure CL (CCL)を立ち上げる場合は下記を入力する。
SBCL: M-x sbcl-start
CCL : M-x ccl-start

  • clbuildを使用する

1. C:\ALICE\Terminal.bat を実行しターミナルを起動する。
2. 「cd clbuild/」と入力してclbuildディレクトリに移動する。
3. 「./clbuild install パッケージ名」を入力してインストールする。
詳細は 「./clbuild --help」で確認してください。