2008年7月24日木曜日

自宅サーバ構築 No.009(パケットフィルタ )

順番が逆ですが、公開する前にいわゆるパケットフィルタ系の設定をしておく必要があります。基本は TCP Wrapper と xinetd による対策と、iptables(Netfilter) による対策です。

それぞれの関係ですが、TCP Wrapper で判定された通信が、xinetd に渡されます。また、TCP Wrapper に渡る前に、iptables で判定されるようになっています。

外から入ってくるパケットは、iptables → TCP Wrapper → xinetd というルートで目的のアプリケーション(ssh/telnet/ftp 等)と通信します。

初期状態で、CentOS 5.2 の iptables は以下の状態です。

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
REJECT は、reject-with icmp-host-prohibited の1行だけで、適切なエラーだけです。また、RH-Firewall-1-INPUT は、INPUT と FORWARD で使用されています。極々最低限の定義で、ほとんど許した後に、それ以外を拒否としているルールなので、iptables を適用していない状態と、ほとんど変わりません。

TCP Wrapper の初期設定は以下の状態です。
# cat /etc/hosts.allow
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#

# cat /etc/hosts.deny
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!

何も定義されていません。

iptables や TCP Wrapper は、例を元に、だいたいで設定をすることが多いのですが、ちょっと時間を掛けて、設定をじっくりやります。

2008年7月21日月曜日

自宅サーバ構築 No.008(ClamAVインストール)

Linux でも、アンチウイルスソフトは必要ということで、ClamAV(Clam AntiVirus) をインストールします。

既に、yum のリポジトリを追加してあるので、追加したリポジトリからインストールします。今回は DAG(RPMForge) を使用します。DAG 以外のリポジでは、clamav という名前で提供されているのですが、DAG では、clamd という名前で、複数パッケージがセットになっています。

いろんなサイトでも、clamd でのインストール例が掲載されていますので、そちらに合せてインストールします。

  1. インストール
    # yum --enablerepo=rpmforge install clamd
    * clamd/clamav/clamav-db がインストールされます。
  2. ClamAV起動
    # service clamd start
    Starting Clam AntiVirus Daemon: [ OK ]
    ちなみに、chkconfig はインストール直後で、以下の設定(on)になっています。
    # chkconfig --list clamd
    clamd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  3. ウイルスパターンアップデート
    # freshclam
  4. その他

2008年7月20日日曜日

自宅サーバ構築 No.007(yumリポジトリ設定)

yum の初期設定では、当たり前ですが、標準のリポジトリしか設定されていません。なので、いくつかのリポジトリは予め追加しておきます。

参考:Computer - CentOSのリポジトリを増やす

EPEL - FedoraProject
* How can I install the packages from the EPEL software repository?

# su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm'
:
# su -c 'yum -y install foo'

以下の通り、リポジトリが追加されます。
# ls -l epel*
-rw-r--r-- 1 root root 1054 4月 26 03:08 epel-testing.repo
-rw-r--r-- 1 root root 954 4月 26 03:08 epel.repo
DAG: RPM packages for Red Hat, RHEL, CentOS and Fedora
# rpm -Uvh http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

上記のようにしてもエラーが発生してしまいます。HTTP で失敗しているようです。wget してからrpm コマンドを実行します。

# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt

以下の通り、リポジトリが追加されます。
# ls -l *rpmforge*
-rw-r--r-- 1 root root 684 3月 9 2007 mirrors-rpmforge
-rw-r--r-- 1 root root 428 3月 9 2007 rpmforge.repo

一般的に DAG/RPMforge は、disable(enable=0)にしておくようなので、変更します。

# vi rpmforge.repo
:
#enabled = 1
enabled = 0
:

Safari for Windows

Safari って、Windowsでは、まだ第三勢力にも満たないと思うのですが、iTune をインストールした際に、同時にインストールされた Apple Software Update によって、Safari のインストールが促されたので、インストールしてみました。

アップル - Safari - ダウンロード

そもそもインストールしていないソフトウェアのアナウンスをするのはおかしいと思うのですが・・・

まあ、それはさておき、「それなりに使えます。」というのが感想です。

とりあえず、プロキシを頻繁に変更する使い方をする私にとって、IE のプロキシ設定をそのまま引き継いでいるのは、いい仕様です。これで、使用するための敷居が低くなったので、ちょくちょく使ってみようと思います。

ただ、Apple のコマーシャルページは、かなりいい加減です。ある意味、これが Apple の素晴らしさなのかも・・・

  1. 圧倒的なパフォーマンス
    SafariはMacとWindows PCで動作する最速Webブラウザです
    最速は言いすぎでしょう。

2008年7月19日土曜日

自宅サーバ構築 No.006(必要なツールの導入)

準備作業が多いですが、必要なツールのインストールはやってしまいます。

  1. screen
    • インストール可能か確認
      # yum info | grep -i ^name | grep -i screen
      Name : gnome-screensaver
      Name : screen
      Name : xfce4-screenshooter-plugin
      Name : xscreensaver
      Name : xscreensaver-base
      Name : xscreensaver-extras
      Name : xscreensaver-extras-gss
      Name : xscreensaver-gl-base
      Name : xscreensaver-gl-extras
      Name : xscreensaver-gl-extras-gss
    • インストール
      # yum install screen
  2. compress
    # yum install ncompress
  3. ntp
    # yum install ntp

    # vi /etc/ntp.conf
    :
    #server 0.centos.pool.ntp.org
    #server 1.centos.pool.ntp.org
    #server 2.centos.pool.ntp.org
    ntp.jst.mfeed.ad.jp
    :

    # ntpdate ntp.jst.mfeed.ad.jp

    # chkconfig --list ntpd
    ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
    # chkconfig ntpd on
    # chkconfig --list ntpd
    ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    # /sbin/service ntpd start
    ntpd を起動中: [ OK ]
  4. その他

自宅サーバ構築 No.005(SELinux無効)

SELinuxは、Red Hat Enterprise Linux、Fedora、CentOS 等では、標準でインストールされます。ファイルシステムもそれ用になっています。本来なら、インストールするかどうかを選択できるといいのですが、インストールされてしまいます。

でも、使いたくありません。随分こなれてきましたが、使わないといけない必然性はありません。

とりあえず、以下の手順で、無効にしておきます。

  1. SELinux の状態を確認
    # cat /etc/sysconfig/selinux | grep ^SELINUX=
    SELINUX=enforcing ← enforcing であれば有効状態です。
    # getenforce ← コマンドでも確認可能です。
    Enforcing
  2. /etc/sysconfig/selinux を編集
    # vi /etc/sysconfig/selinux
    :
    SELINUX=disabled ← enforcing を disabled に変更
    :
    以下の方法で、
    # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  3. システム再起動
    # shutdown -r now
  4. SELinux の状態を確認(システム再起動後)
    # cat /etc/sysconfig/selinux | grep ^SELINUX=
    SELINUX=disabled ← disabled であれば無効状態です。
    # getenforce ← コマンドでも確認可能です。
    Disabled

自宅サーバ構築 No.004(yum設定)

とりあえず一休みというわけではないのですが、最少構成のため、これから必要なパッケージは全てインストールしていくことになります。ということで、yum の設定を済ませておきます。

  1. yum の キャッシュディレクトリを掃除
    # yum clean all
    Cleaning up Everything
  2. yum-fastestmirror をインストール
    fastestmirror で最もアクセスしやすいミラーサイトを自動選択してくれるようになります。
    # yum install yum-fastestmirror
  3. アップデート可能なパッケージをすべて更新
    最少構成でも結構時間が掛かります。
    # yum update
まずは、このくらいでいいでしょう。標準のリポジトリにないパッケージをインストールしたりする場合、リポジトリを変更したりする必要がありますが、それは後程ということで。

2008年7月18日金曜日

自宅サーバ構築 No.003(Wheel設定)

SSHでのログインを、root ログイン禁止、パスワード認証禁止、公開鍵認証のみ許可設定しましたが、もうひと工夫必要です。

一般ユーザで、root になれるユーザを制限することで、悪意をもった一般ユーザが root に昇格することを避けるため、指定したユーザのみ root になれるようにします。一般的にいう Wheel 設定です。

  1. wheel グループへ一般ユーザ(hoge)を追加
    # cat /etc/group | grep wheel
    wheel:x:10:root
    # usermod -G wheel hoge
    # cat /etc/group | grep wheel
    wheel:x:10:root,hoge
  2. PAM設定
    /lib/security/pam_wheel.so が存在することを確認します。
    存在しない場合、インストールが必要です。
    # vi /etc/pam.d/su
    :
    #auth required pam_wheel.so use_uid
    auth required pam_wheel.so use_uid ← コメントを外す
    :
    特にシステム再起動などを行わなくても、設定は反映されます。
これで、特定のユーザ以外は root になれません。Linux は標準状態で多くのユーザが追加されており、パスワード設定などされていないので、原則使えないので問題は少ないのですが、それらのユーザがクラックされて、そこから root に昇格なんてことは最小限にできます。

弱点と言えば、/etc/group を眺めると root になれるユーザがわかってしまうということでしょうか。

2008年7月17日木曜日

TeraTerm No.001(自動的に終了しない)

TeraTerm の初期設定は、セッションが切断されると TeraTerm のウインドウが終了してしまいます。ログイン時のちょっとした間違い(IPアドレス、パスワードなど・・・)でも終了されてしまうのですが、再度、ログインしたい場合は、非常に不便です。その場合、以下の設定をしておくことで、セッション切断時にウインドウを終了しないようになります。

  • TeraTerm で、[設定]-[TCP/IP]を選択します。
  • [Tera Term: TCP/IP設定]画面で、‘自動的にウィンドウを閉じる’のチェックを外し、[OK]をクリックします。
  • 設定した内容を次回以降も継続して使いたい場合は、[設定]-[設定の保存]を選択し、設定を保存しておきます。(通常は TERATERM.INI を上書きします。)

2008年7月16日水曜日

自宅サーバ構築 No.002(SSH設定)

とりあえずCentOSをインストールし終わりましたが、当然、このままでは公開できません。まずは、いくつかセキュリティ面で設定する必要があります。

まずは、SSHに必要な設定を行います。

  • rootでのログインを禁止する
  • パスワード認証を禁止する
  • 公開鍵認証のみ許可する
まず、インストール直後は、SSHがインストールされており、リモートからrootでログイン可能な状態なので、リモートからrootでログインします。

※以下、PuTTYで操作しています。

以下の通り、最初は警告が表示されますが、そのまま[はい]をクリックします。


  1. root 以外のユーザーを作成
    rootでのログインを禁止するわけですから、root以外のユーザーを作成する必要があります。
    # useradd -d /home/hoge -c HOGE -u 1001 hoge
    # passwd hoge
    Changing password for user hoge.
    New UNIX password:
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.
  2. root でのログインを禁止
    以下の設定を実施し、rootでログインできないこと、作成したユーザーでログインできることを確認します。
    # vi /etc/ssh/sshd_config
    :
    #PermitRootLogin yes ← 標準はデフォルトがyes
    PermitRootLogin no
    :

    # service sshd restart ← 設定反映
    sshd を停止中: [ OK ]
    sshd を起動中: [ OK ]
  3. 公開鍵作成
    パスワード認証を禁止する前に公開鍵認証を設定します。公開鍵認証前にパスワード認証を禁止するとログインできなくなっていまいますから・・・ :-)
    $ ssh-keygen -b 2048 -t rsa -C hogehoge
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
    Created directory '/home/hoge/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/hoge/.ssh/id_rsa.
    Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
    The key fingerprint is:
    xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hogehoge
  4. 公開鍵を authorized_keys へ追加
    $ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
    $ chmod 600 authorized_keys ← パーミッションを600に変更
    $ ls -l authorized_keys
    -rw------- 1 centuser centuser 398 7月 17 09:20 authorized_keys
    $ rm id_rsa.pub ← 不要なので削除
  5. id_rsa を保存
    id_rsa をターミナルソフトを起動するクライアントへ保存します。これがなくなってしまうと公開鍵の作成からやり直しになるので要注意です。
  6. id_rsa の変換(PuTTY の場合)
    TeraTerm 等では、id_rsa がそのまま使えるので、変換は特に必要ありません。PuTTY の場合は必要になるので、以下の通り変換しておきます。
    • PuTTYgen を起動します。
    • [PuTTY Key Generator]画面で、[Conversions]-[Import key]で保存した id_rsa を開きます。
    • [PuTTYgen: Enter Passphrase for key]画面で、パスフレーズを入力します。
    • [PuTTY Key Generator]画面で、[Save private key]をクリックし、id_rsa.ppk を作成します。
  7. ターミナルソフトで公開鍵認証で接続
    ターミナルソフトで公開鍵認証で接続できることを確認します。
  8. パスワード認証を禁止
    公開鍵認証での接続が成功することを確認して、パスワード認証を禁止します。
    設定後、パスワード認証できないことを確認します。
    # vi /etc/ssh/sshd_config
    :
    #PasswordAuthentication yes ← 初期設定では yes なのでコメントアウト
    PasswordAuthentication no
    :

    # service sshd restart ← 設定反映
    sshd を停止中: [ OK ]
    sshd を起動中: [ OK ]
これで、リモートからは、root 以外のユーザーで、公開鍵認証の設定可能なターミナルからのみログインできるようになりました。

ひとつ気になるのは、PuTTY でパスワード認証をチャレンジすると
No supported authentication methods available
と表示されて、拒否されます。動作は満たしていますが、パスワード認証を禁止しているということがわかってしまいます。これはできれば隠匿したいですね。パスワード認証時のエラーを返すほうがいいと思いますが、そういう動作をさせると問題あるんでしょうかね。

PuTTY No.001(できるだけマウスを使わない)

PuTTYを使っていると不便なことがいくつかあります。ターミナルソフトとしての基本はできているのですが、シンプル故に何とやらです。

標準の設定のままではマウスを多用しなければいけません。なので、以下が、できるだけマウスを使わないようにするための設定です。

  • システムメニューの表示
    システムメニューは頻繁じゃないですが、‘新しいセッション’、‘セッションの複製’、‘フルスクリーン’そして、‘設定の変更’と使うメニューは多いです。しかし、このシステムメニューは、ウインドウの左上をマウスでクリックしなければなりません。そこで、システムメニューを[Alt]+[Space]で表示できるようにします。
    1. PuTTY起動時に表示される[PuTTY Configuration]画面で設定します。
    2. [カテゴリ]-[ウインドウ]-[動作]で、以下の項目をチェックします。
      ■ALT-Space でシステムメニューを表示する
      ■Alt-Enter でフルスクリーンにする
  • ペースト(貼り付け)
    この手のターミナルソフトは、マウスの右クリックで、クリップボードの内容を貼り付けることができます。そして、同様の操作が[Alt]+[v]等のショートカットでペーストできますが、PuTTYでは、それができません。かつ、いわゆるメニューがないので、ショートカットが明示されていないので、分かりづらいのですが、[Shift]+[Ins]でペースト可能です。一応、ヘルプにも以下の通り記述があります。
    A.6.6 How do I copy and paste between PuTTY and other Windows applications?

    Copy and paste works similarly to the X Window System. You use the left mouse button to select text in the PuTTY window. The act of selection automatically copies the text to the clipboard: there is no need to press Ctrl-Ins or Ctrl-C or anything else. In fact, pressing Ctrl-C will send a Ctrl-C character to the other end of your connection (just like it does the rest of the time), which may have unpleasant effects. The only thing you need to do, to copy text to the clipboard, is to select it.

    To paste the clipboard contents into a PuTTY window, by default you click the right mouse button. If you have a three-button mouse and are used to X applications, you can configure pasting to be done by the middle button instead, but this is not the default because most Windows users don't have a middle button at all.

    You can also paste by pressing Shift-Ins.

2008年7月15日火曜日

自宅サーバ構築 No.001(CentOSインストール)

特に何をするわけでもないのですが、自宅サーバを構築してみたいと思います。

あまったPCが1台あるので、構築してみます。電気代が思った以上に掛かるようなら運用しないかもしれません。その程度の意気込みです。 :-)

サーバ用途なので、まずは最少インストールです。以下のページを参考にしました。

CentOS5 インストール方法

以下、netinstall版のCDを使用しています。

  1. boot: で [Enter] を押します。
  2. [Choose a Language]画面で、‘Japanese’を選択し、[OK]を押します。
  3. [Language Unavailable]画面で、[OK]を押します。
  4. [Keyboard Type]画面で、‘jp106’を選択し、[OK]を押します。
  5. [Installation Method]画面で、‘FTP’を選択し、[OK]を押します。
  6. [Networking Device]画面で、使用するNICを選択し、[OK]を押します。
  7. [Configure TCP/IP]画面で、以下の通り設定し、[OK]を押します。
    [*] Enable IPv4 support
    (*) Manual configuration
  8. [Manual TCP/IP Configuration]画面で、IPv4 address、Gateway、Name Serverを設定し、[OK]を押します。
  9. [FTP Setup]画面で、以下の通り設定し、[OK]を押します。
    FTP site name: ftp.riken.jp
    CentOS directory: /Linux/centos/5/os/i386
  10. [次]をクリックします。
  11. パーティション設定で、‘カスタムレイアウトを作成します。’を選択し、[次]をクリックします。
  12. 適当にパーティションを設定し、[次]をクリックします。
  13. ブートローダ設定で、‘GRUBブートローダは、/dev/hda 上にインストールされます。’を選択し、[次]をクリックします。
  14. ネットワークの設定で、FTPサイトを指定した時の設定が引き継がれているので、ホスト名以外は、そのままで、[次]をクリックします。ホスト名は、適当に設定します。
  15. 時刻設定で、‘アジア/東京’を選択し、‘システムクロックでUTCを使用’をチェックし、[次]をクリックします。
  16. パスワード設定で、適当なパスワードを指定し、[次]をクリックします。
  17. パッケージ選択画面で、すべてのチェックを外し、‘今すぐカスタマイズする’を選択し、[次]をクリックします。
  18. パッケージ選択画面で、以下の通りパッケージを選択し、[次]をクリックします。
    • アプリケーション
      ■エディタ
    • 開発
      ■開発ツール
    • ベースシステム
      ■ベース (firstboot-tuiを明示的に外す)
      ※firstboot-tuiは、最初にCentOSのセットアップをするためのパッケージ
    • 言語
      ■イギリス語のサポート
      ■日本語のサポート
  19. [次]をクリックします。
  20. [再起動]をクリックします。
インストールとしては、以上です。パッケージの内容等は精査できていないので、インストール後の設定で、追加設定をしながら確認します。

2008年7月13日日曜日

Windows仮想デスクトップ No.002(VirtuaWin)

VirtuaWinのオプション設定ですが、ホットキーの設定だけは、標準では足りないので、追加で設定が必要だと思います。

以下、設定例です。


Move to next
Move to previous
Move to desktop 1
Move to desktop 2
Move to desktop 3
Move to desktop 4

上の4つを追加しています。標準だと、ワークスペースの切り替えが、Left、Right、Up、Downしかりませんが、ここが足りません。(desktop # の指定は、ワークスペース分必要です。)

VirtuaWin - Virtual Desktops for Windows

Windows仮想デスクトップ No.001(VirtuaWin)

Windowsのデスクトップは使えば使う程、狭く使いにくくなるわけですが、そういった場合、仮想デスクトップを使うとデスクトップの整頓がしやすくなります。そこで、おすすめは、VirtuaWinです。

VirtuaWin - Virtual Desktops for Windows

軽いですし、動作も問題ないです。プラグインも多数あるようです。

とりあえず、以下の設定はしておいたほうがいいと思います。

  • [General]-[Enable desktop wrapping] Check
    この設定をしないと、ホットキーによる切り替えがサイクリックに行われないので不便です。
    この設定をしておくと、左端まで切り替えて、更に左へ切り替えると右端に戻るようになります。

2008年7月11日金曜日

ssh鍵認証 No.001(Linuxで鍵作成)

sshで鍵認証する場合の一例です。

  1. ssh-keygen で id_rsa と id_rsa.pub を作成します。
    適当なパスフレーズを入力して作成します。
    ssh-keygen -t rsa -b 2048
  2. id_rsa.pub を authorized_keys に追加します。
    cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
  3. id_rsa を 接続するターミナルソフト側で読み込みます。
    • PuTTYでは、id_rsa を PuTTYgen で private key として保存します。
  4. ターミナルソフトで接続時に id_rsa を指定して接続します。
    • PuTTYでは、private key として保存した、id_rsa.ppk 等を指定します。
    • TeraTermでは、id_rsa をそのまま鍵として指定します。
ちなみに、鍵認証を利用するメリットは、何でしょうか。まあ、「鍵を持ってないと認証を受けられない」という当たり前のことに加え、パスワードがネットワーク上を流れないことでしょうか。パスワードがネットワーク上を流れないことについては、sshを使っている時点で、暗号化されている為、個人的には必要十分だと思いますが、それよりもセキュリティ的には堅牢です。(解読対象がネットワークを流れないわけですから。)

といってしまうと、確かに鍵認証は、パスワード認証に比べて、より強固なセキュリティを提供してくれるわけですが、大きな落とし穴があります。それは、パスワード認証と併用していると、鍵認証よりも低いセキュリティレベルの認証ができてしまい、パスワード認証可能な環境であれば、「鍵を持っていなくても認証ができる」→「誰でもアタックできる」状態となってしまいます。

以下の様に、sshd_config で、パスワード認証を禁止しておかないとメリットは半減です。
PasswordAuthentication no

2008年7月6日日曜日

Firefox No.009(Stylish)

Y's Weblog B-Site: Firefox No.007(Gmailを固定ピッチで表示する)であったようなスタイルシートの編集には、Stylishが便利です。

Stylish :: Firefox Add-ons

このアドオンで、わざわざ深い階層のファイルを探して、作って、編集しなくても、URL毎(mail.google.comなど)に簡単にスタイルシートを設定できます。

また、‘このページのスタイルを検索’を使うと、表示中のページのスタイルシートで投稿されたものが参照できます。ほとんどが海外の情報なので、固定ピッチ、等幅なんてのは出てきません。たとえば、楽天なんかを表示して、検索してもNot styles found.です。

2008年7月4日金曜日

Thunderibird No.031(添付ファイルのアイコンを小さくする)

Thunderbirdで添付ファイルがアイコンで表示されますが、標準では大きめです。これを小さくする方法は以下の通りです。

  1. [ツール]-[オプション]を選択します。
  2. [オプション]画面-[詳細]-[一般]タブで、[設定エディタ]をクリックします。
  3. [about:config]画面で、‘フィルタ’に‘mailnews.attachments.display.largeView’を入力します。
  4. 表示された‘mailnews.attachments.display.largeView’をダブルクリックし、設定を以下の通り変更します。
    ‘true’→‘false’

家庭用UPSの選択

まず、家庭でUPSがいるのかどうかという点からして?ではありますが、あるに越したことはないです。

実際、これから雷の季節ですし、突然、瞬断も増えると思います。そんな時は、UPSがあれば・・・です。ノートブックパソコンなら関係ないわけですが。

OMRON BX35F 無停電電源装置(UPS)
OMRON BX35F 無停電電源装置(UPS)

この製品は、価格もそこそこ、容量もそこそこ、使い勝手もそこそこと及第点です。10,000円程度ですが、バッテリモジュールのホットスワップにも対応していますし、ユーティリティソフトもPowerAct Proが付属しています。PowerAct ProはLinuxにも対応しています。

BX50Fという上位モデルもありますが、バッテリは何れへたるもんですから、必要な容量からして、BX35Fで十分だと思います。

2008年7月2日水曜日

forを一行で書く

シェルでfor文を一行で書くと結構便利です。

基本は以下のように書くわけです。何らかの連続した動作をさせる時に重宝します。

for i in 1 2 3 4; do date; echo $i; done
例えば、そのままですが、決められたことを順番に動作させる場合、こんな感じです。
  • abc def ghi と順に表示
    $ for i in abc def ghi; do echo $i; done
    abc
    def
    ghi
  • host01 から host10 まで ping を発行
    $ for i in `seq -f "host%02.0f" 1 10`; do ping -c 1 $i; done
セミコロンの位置がややこしいですが、do と done の前にセミコロンと覚えておくとわかりやすいです。

2008年6月25日水曜日

Thunderbird No.030(Quicktextでルーラー機能)

ルーラー機能がないという致命的な欠陥(といえばいい過ぎ・・・)を抱えているThunderbirdですが、Thunderbird 用拡張機能にあるRulerrrrrでルーラー機能を使えるのですが、ライセンス上はビジネスユースでは使えない・・・のです。

ユーザは、非営利かつ個人的な目的に限り、本製品を対応製品にインストールし、無償でご利用いただくことができます。
といった一文が掲載されています。会社では使えないですよね・・・

やはり、ルーラー機能は必要です。ないと日本人としてメールが書けません。日本語メールは桁揃えが重要ですし、受ける人も結構意識しているもんです。

ですから、ルーラー機能は必要なんです。というわけで、ルーラー機能を備えたアドオンを探していましたが、ありませんねぇ・・・

まあ、ルーラーがない状態でも、以下の通り、‘プレーンテキストメッセージを○文字で改行する’を適当な文字数に設定することで、ルーラーがなくても何とかなっていました。



しかし、改行文字数の設定が簡単に切り替えられないThunderbirdの場合、どうしても改行したくないメールを書くことを想定すると、「改行しない」設定で使うほうがいいので、改行を‘0’文字と設定して、改行しないよう設定し、手動で必要に応じて改行するようにしました。



となると、自分で改行していかないといけないので、ルーラーが必要になってきました。

でも、適当なアドオンはないので、QuickTextで桁数の目安となるテキストを挿入することで、ルーラー機能を代替しています。

やり方は以下のスケールとなる以下のようなテキストを設定し、必要に応じて、QuickTextのショートカットでテキストを表示し、改行位置を確認し、確認が終わったら、[Ctrl]+[z]で表示されたテキスト行を削除するという方法です。
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8

2008年6月24日火曜日

シェルで配列を使う No.003

シェルで配列を使う際、要素でソートする場合、以下のようにするのですが、

HOGE2=(`echo ${HOGE[*]} | sed 's/\s/\n/g' | sort`)
これだと、確かにソートされるのですが、数字としては、うまく処理されません。そこで、以下の通り、一旦、ゼロ付数字に変換してやることで、正常にソートされます。
  • 正常にソートされない
    要素が 1 5 11 2 3 21 31 22 だとすると、以下のようになってしまいます。
    1 11 2 21 22 3 31 5
  • ゼロ付数字に変換してソートする
    要素を 01 05 11 02 03 21 31 22 に変換してソートします。
    # ゼロ付でソート
    HOGE2=(`printf "%02.0f\n" ${HOGE[*]} | sort | sed 's/\n/ /g' | sed 's/\s+$//g'`)
    # ゼロを取り除く
    HOGE3=(`printf "%.0f " ${HOGE2[*]}`)
    1 2 3 5 11 21 22 31
余談ですが、sed で 半角スペースを扱う時は、"\s" と表現しますが、場合によっては、"\ " としないといけない場合があります。なぜかは理解できていません。

2008年6月21日土曜日

Firefox No.008(You were denied acces)

Firefoxを3にバージョンアップして、最初の接続時に以下のメッセージが出力されるようになりました。

Forbidden
You were denied access because:

Access denied by access control list.

いろいろ調べてみると、以下のMicrosoftとGoogleのページが引っ掛かりました。

"403 Forbidden - access denied " というエラーが表示されるのはなぜですか。 - Picasa と Picasa ウェブ アルバム ヘルプ

Web ページを開くときに "Access Denied By Access Control List" というエラー メッセージが表示される

どちらも、「プロバイダ(ISP)のせいで、そうなることがあるから、もう一度アクセスしなおしてください。影響ないです。」といった回答になっています。まあ、確かにそうなんですが。

IEならそうはならないのと、Firefoxを3にしてから発生しているので、PC側になんらかの問題があるはずですが・・・原因はわかりません。とりあえず、そのままもう一度、リロードすると問題ないので、深くは追求していません。

Firefox No.007(Gmailを固定ピッチで表示する)

Gmailですが、非常に便利で重宝します。モバイルでチェックできますし、容量も5GBちかく使えます。ただ、メール本文などが、プロポーショナルフォントで表示されるようになっており、メーラーとしては少々使いづらいです。

そこで、Firefoxで固定ピッチフォントに切り替える方法です。(※ローカルのスタイルシート情報を編集する方法で、環境毎に設定が必要です。)

以下、手順です。

  1. C:\Documents and Settings\%USERNAME%\Application Data\Mozilla\Firefox\Profiles\abcdefg.default\chrome にある、userContent-example.cssをコピーし、userContent.cssを作成します。(Customizing Mozzila
  2. 以下の内容を追記します。
    @-moz-document domain(mail.google.com) {

        .ArwC7c {
            font-size: small !important;
            font-family: monospace !important;
            line-height: 1.2 !important;
        }
        textarea {
            font-family: monospace !important;
        }

    }

2008年6月19日木曜日

Firefox No.006(FoxyProxy)

次世代ブラウザ Firefox - 高速・安全・自由にカスタマイズ

SwitchProxy Tool :: Firefox Add-ons
FoxyProxy :: Firefox Add-ons

Firefoxを3へバージョンアップしたところ、案の定、いくつかのアドオンが使えなくなりました。その中に、とっても重要なアドオンSwitchProxyがありました。正直これは困ります。

とりあえず、旧バージョンしか対応していないxpiファイルを編集しましたが、これまでのようにうまくインストールされません。

仕方なく、別のアドオンを使うことにしました。とりあえず、良さそうなFoxyProxyをインストールして使っています。かなり高度なことができるようですが、使いこなせていません。とりあえず必要なプロキシを指定している程度の使い方です。

凝った使い方は、別の機会に・・・

2008年6月17日火曜日

シェルで配列を使う No.002

なんでもかんでもシェルでやってしまおうとすると、配列を扱うことが多くなり、配列による複雑な処理が増えてきます。

配列全体を表示する時は、echo ${HOGE[*]} としたりするのですが、そうすると配列の要素がブランク区切りで表示されます。

echo ${HOGE[*]}
a b c d e f g h i j k 1 1 1 1 2 2 2 a b c x y z
いろんな処理をしていると、重複した要素をまとめたいことがあります。また、要素をソートしたい場合もあります。以下、それらの方法です。

  1. 重複した要素をまとめる
    sort と uniq を使いたいので、配列の要素列をスペースを改行に変換します。
    HOGE2=(`echo ${HOGE[*]} | sed 's/\s/\n/g' | sort | uniq`)
  2. 要素をソートする
    1.の例とほとんど同じで、uniqが無いだけです。
    HOGE2=(`echo ${HOGE[*]} | sed 's/\s/\n/g' | sort`)

2008年6月15日日曜日

exprで掛算する場合

exprで四則演算する場合に嵌ってしまうところです。

exprの文法では、+、-、*、/で加減乗除を行うわけです。例えば、シェルスクリプトの中では、カウンタ変数の足算が最もポピュラーな使い方ではないでしょうか。以下のようにやりますね。

cnt=0
while [ #{cnt} -lt 10 ]
do
cnt=`expr ${cnt} + 1`
done
これと同様に減算、除算はできてしまいますが、乗算(掛算)はうまくいかない場合があります。すぐに気付くのですが、‘*’はメタキャラクタとして扱われて、シェルスクリプトが実行されているカレントディレクトリなどが展開されてしまいます。
[NG]
hoge=`expr ${hoge} * 10`
[OK]
hoge=`expr ${hoge} '*' 10`
hoge=`expr ${hoge} "*" 10`
hoge=`expr ${hoge} \* 10`
‘うまくいかない場合がある’と表現したのは、[NG]の書き方でもうまくいく場合があるからです。シェルやそのバージョンなどの環境によるのかもしれませんが、ダメな場合があるので、念のため囲んでおいたほうがいいでしょう。

2008年6月14日土曜日

シェルで配列を使う No.001

シェルスクリプトでも、一般的なプログラミング言語と同様に配列変数を使えます。

使い方は簡単で、値を複数代入することで、配列変数となります。ただし、この簡単さ故に、規則的にコーディングしないと、配列なのかどうかわからなくなってしまったりします。

  1. 初期化
    必須というわけではないですが、一応行っておいたほうが無難でしょう。
    HOGE=()
  2. 初期化(代入)
    ()で初期化すると値は何も入っていない状態ですが、値を代入しながら初期化することも可能です。(括弧で括って、スペースで区切ります。)
    HOGE=(a 1 bcd 123)
  3. 参照(1)
    代入してある値を参照する方法です。

    一つ一つ値を参照
    echo ${HOGE[0]} ${HOGE[1]} ${HOGE[2]}
    a 1 bcd
    まとめて参照
    echo ${HOGE[*]}
    a 1 bcd 123
  4. 参照(2)
    ちょっと変わった参照方法です。

    文字数を参照 (変数名の先頭に#をつけて、要素を指定します。)
    echo ${#HOGE[2]}
    3
    要素数を参照 (変数名の先頭に#をつけて、全要素‘*’を指定します。)
    echo ${#HOGE[*]}
    4
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
入門UNIXシェルプログラミング シェルの基礎から学ぶUNIXの世界

図解でわかるLinuxシェルスクリプト・正規表現
図解でわかるLinuxシェルスクリプト・正規表現

2008年6月10日火曜日

cutでデリミタとして連続スペースを使う

cutでデリミタとして連続スペースを使う方法ですが、正確には、cutで連続スペースをデリミタとして使用できません。ですので、連続スペースを1つのスペースにまとめて処理することになります。

まず、sedで連続スペースを1つのスペースにまとめる方法です。

sed 's/\s\{1,\}/ /g' hoge1.txt > hoge2.txt
次に、cutで1つのスペースをデリミタとして使用します。
cut -d' ' -f1 hoge2.txt > hoge3.txt
パイプで続けて実行する場合は、以下の通りです。
cat hoge1.txt | sed 's/\s\{1,\}/ /g' | cut -d' ' -f1 > hoge3.txt

2008年6月1日日曜日

screenならセッションが切れても大丈夫

Linuxなどのターミナルで、screenコマンドを使うことで、セッションが切れても大丈夫ですし、画面を共有したりもできます。

Manpage of SCREEN
Let's use SCREEN!
iandeth. - screen - 仮想端末マネージャーの使い方

[Ctrl]+a は ^A と表しています。(^ は [Ctrl]+? ということです。)
a は小文字、A は大文字です。a は[a] 、A は [Shift+a] です。

【screenの操作】

  1. screenを起動する
    # screen
  2. screenから抜ける
    ^A d
  3. screenに(再)接続する
    # screen -r

【ウィンドウの操作】
  1. ウィンドウを開く
    ^A c
  2. ウィンドウを閉じる
    ^A K
【リージョンの操作】
  1. リージョンを分割する
    ^A S
  2. リージョンを破棄する
    ^A X
  3. カレントのリージョン以外を全て破棄する
    ^A Q
【スクロール・コピー・ペースト】
  1. スクロールモードにする
    ^A Esc
  2. 範囲選択・コピー
    Enter / Space
  3. ペースト
    ^A ]

【その他】
  1. 最下行にウィンドウ一覧を表示
    .screenrcに以下のhardstatus alwayslastlineを指定
    hardstatus alwayslastline %w
  2. エスケープキーバインドの変更
    .screenrcに以下のescapeを指定
    (^Aaを^Zzに変更)
    escape ^Zz

2008年4月14日月曜日

Thunderbird No.029(Remove Duplicate Messages)

Thunderbirdですが、非力なマシンで使っていると、必ずしもレスポンスがいいとは言えません。そうなるとメッセージのデータがおかしくなったりします。

そうすると重複メッセージができてしまったりします。そこで、Remove Duplicate Messagesが役に立ってくれます。そのままですが、重複メッセージを削除してくれます。

Remove Duplicate Messages (Alternate) :: Thunderbird Add-ons

重複メッセージの判定が微妙ですが、そのあたりは設定を変更できるので、結構柔軟に対応できます。

また、Thunderbirdのメッセージデータがおかしくなると、無題(題名が無し)で、日付が1970/01/01というメッセージが出現したりします。これは削除してもまた出てきたりとたちが悪いです。これの回復(削除)方法ですが、とりあえず削除したりして、消えない場合は、フォルダの最適化をすると解消してくれます。