UNIXやLinux: 2017年1月アーカイブ

例えば、

http://www.exsample.com/cgi-bin/test.cgi

にアクセスすると、

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";

のような、CGI プログラムのソースが表示されてしまう。

さて、今回は Debian 系のパッケージ、いわゆる APT パッケージの Apache 2.4 を入れてみた。
RedHat 系世界の住民の俺から見ると、頭がおかしいんじゃないか?と思うような Apache 設定ファイルの構成である。

てか、俺は Apache に関しては「ソースからインストール派」なので、RPM パッケージの Apache の設定ファイル群にもイラっとさせられるんだけどね(笑)
まあ、この辺は宗教問題なのでこれ以上の言及は控えておきましょう(笑)

CGI プログラムのソースが表示されてしまう件に話を戻す。

まず、VirtualHost 設定の該当部分。

/etc/apache2/sites-available/www.exsample.com.conf の中に、

    ScriptAlias /cgi-bin/ "/usr/local/share/apache/cgi-bin/"

    <Directory "/usr/local/share/apache/cgi-bin">
        AllowOverride All
        Options +ExecCGI

        AddHandler cgi-script .cgi .pl

        Require all granted
    </Directory>

という記述あり。

なんか、ScriptAlias と Handler/ExecCGI の設定が二重にされてますけど(^^;
まあ、ScriptAlias してるんだから +ExecCGI は不要だと思うけど、現行、これで問題なく動いているので、とりあえずこれで良しとする(笑)

で、実際に CGI module を読み込んでるんかいな?と確認してみると、

# apache2ctl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)
 setenvif_module (shared)
 status_module (shared)

ありり?cgi_module がロードされてませんねえ。

# ls -la /etc/apache2/mods-available/cgi.load
-rw-r--r-- 1 root root 58  7月  6  2016 /etc/apache2/mods-available/cgi.load

cgi.load というファイルはあるので、こいつのシンボリックリンクを /etc/apache2/mods-enabled の下に作ってやる。

ln コマンド使って手動でやればすぐだが、せっかくなので a2enmod コマンドを使ってみる。
これ、シンボリックリンクを作ってくれるだけのコマンドのようだ。こんなコマンドの使い方を覚えている暇があれば、さっさと手動でリンクしちゃった方が早いじゃんとか言いながら笑ってはいけない。Debian 信者からむっちゃこのコマンドの正当性を説明されるで(笑)

# ls -la /etc/apache2/mods-enabled/*cgi*
ls: /etc/apache2/mods-enabled/*cgi* にアクセスできません: そのようなファイルやディレクトリはありません
# a2enmod cgi.load
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:
  service apache2 restart
# ls -la /etc/apache2/mods-enabled/*cgi*
lrwxrwxrwx 1 root root 27  1月 18 17:31 /etc/apache2/mods-enabled/cgid.conf -> ../mods-available/cgid.conf
lrwxrwxrwx 1 root root 27  1月 18 17:31 /etc/apache2/mods-enabled/cgid.load -> ../mods-available/cgid.load

素晴らしい(笑)

しかし、俺は cgi モジュールをロードしたかったのに、なぜに cgid が???

cgid って、Perl とかの生エラーメッセージをログに吐いてくれないからいやなんよね。

ま、いっか(^^; 今度時間が出来たら対応しよう。

で、サーバ再起動。

# service apache2 restart

CGI モジュールも、

# apache2ctl -M|grep cgi
 cgid_module (shared)

無事ロードされたね。

これで、

http://www.exsample.com/cgi-bin/test.cgi

にアクセスすると、

Hello, World

と表示されるようになる。

どう?RedHat 系世界の住民の皆さん。気持ち悪いでしょ?(笑)
若干のトラブルはあったものの(^^;、新しい OS イメージの展開に成功したので、それを Raspberry Pi の起動ディスク(SDHC カード)に焼き付ける。

今、俺んちにあるマシンで SD カードが刺さるのって MacBook Pro だけなので(Windows 機のメモリカード I/F 全部壊れてもうた。なんでじゃろ?(^^;)、作業は OS X のシェル上で行なう。

まず、MacBook Pro に SD カードを刺す。今回は、I-O データ製の 32GB SDHC カードを使用。

シェル上でカードが認識されていることを確認。
(ちなみにワシ、sudo じゃなくて root で作業する派なので悪しからず(sudo 派、うるせえからなあ(^^;))

# diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS osx                     499.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *24.1 MB    disk1
   1:        Apple_partition_map                         32.3 KB    disk1s1
   2:                  Apple_HFS PX504A_JPN_OSX_3783_41B 24.0 MB    disk1s2
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *30.9 GB    disk2
   1:             Windows_FAT_32 NO NAME                 30.9 GB    disk2s1
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *4.4 GB     disk3
   1:             Windows_FAT_32 boot                    66.1 MB    disk3s1
   2:                      Linux                         4.3 GB     disk3s2

disk2 として認識されているのがわかる。

これ、そのまま dd コマンドでイメージを焼き付けようとすると、

# dd bs=1m if=/Users/shinoda/2016-11-25-raspbian-jessie.img of=/dev/disk2
dd: /dev/disk2: Resource busy

という具合に Resource busy になっちゃうので、File System から SD カードを一旦 unmount する。
カードそのものではなく、論理ディスクだけをね。

# diskutil umount /dev/disk2s1
Volume NO NAME on disk2s1 unmounted

そして、dd コマンドでディスクイメージを焼き付け。

# dd bs=1m if=/Users/shinoda/2016-11-25-raspbian-jessie.img of=/dev/disk2
4169+0 records in
4169+0 records out
4371513344 bytes transferred in 2087.134050 secs (2094505 bytes/sec)

結構時間がかかる。
うちの(8年前に購入した)MacBook Pro のシェル上だと30分くらいかかった。

20170103_raspberry.JPG
もう一度 diskutil list コマンドで確認すれば、SD カードが Linux の boot ディスクになっているのがわかる。
書き込みは成功。

/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *30.9 GB    disk2
   1:             Windows_FAT_32 boot                    66.1 MB    disk2s1
   2:                      Linux                         4.3 GB     disk2s2

正常に書き込みが終了したら、SD カードそのものを unmount する。

# diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

MacBook Pro から SD カードを抜いて Raspberry Pi に刺し、電源を入れれば Raspbian が起動するぞ。
20170101_raspberrypi1.JPG
事務所のサーバを、でっかい DELL のタワー型サーバから Raspberry Pi 3 に置き換えようと思ってる。
Raspberry Pi 3 は年末の Amazon で買ったら、急ぎ配送で元旦に届いた(笑)
ええと、Amazon 配送による運送屋さんの作業過多が社会問題になってましたが、ごめんなさい。俺のような客がいるからですね。正月の配達、ありがとうございました(^^;

まあ、それはそれとして(^^;

さっそく、最新の OS(RASPBIAN JESSIE WITH PIXEL Kernel 4.4)を、


から「Download ZIP」ボタンクリックで落としてきた。

2016-11-25-raspbian-jessie.zip

これを Mac OS X 標準のアーカイバーで解凍すると、

2016-11-25-raspbian-jessie.zip.cpgz

という、なんか知らない拡張子のファイルに・・・ img ファイルにならない。
いきなり作業中断。こんなところで悩むことになるとは思っていなかった(^^;

結局、StuffIt Expander で解凍したら問題なく

2016-11-25-raspbian-jessie.img

に解凍された。

ググってみると「バージョンの古いStuffIt Expander(ver 8.0.2)で解凍しないとだめだった」という情報もあったんだけど、うちは 15.0.7a という新しい(どの程度新しいものなのか不明なのだが)バージョンで OK だった。
なんか、cpgz になるにも色々なパターンがあるみたいやなあ。「拡張子が zip なのに、中身はテキストファイルだった」とか「古いアーカイバソフトで圧縮したため」とか、原因も色々あるみたいなんで、解決策も色々ってことだろうな。

ま、これで先に進めます(笑)

このアーカイブについて

このページには、2017年1月以降に書かれたブログ記事のうちUNIXやLinuxカテゴリに属しているものが含まれています。

前のアーカイブはUNIXやLinux: 2016年12月です。

次のアーカイブはUNIXやLinux: 2017年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら