まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2014/01

システムプログラマーとして株式会社クーシーに入社後、半年が経ちました。

まだ毎日が勉強で、知らないことも驚くことも多いし、偉そうに感想を言えるような立場ではないのですが、特に大きく印象に残っている発見はこれです:
「今どきのウェブって、これだけの人がこれだけの作業をしてできているのか」

例えば企業のウェブサイト。中小企業だったりするとサイトの規模そのものは必ずしも大きいわけではないのです。極端な例ですが、1ページだけを作る場合で考えます。

これまでの自分がそのページを作ろうとすると、どちらかというと「やりたいことは技術的に実現できるかどうか」を中心に考えていました。今も自分の担当箇所でいえば技術的にできるかどうか、どのくらいでできそうか、ということが検討内容になりますが、それをどう見せるか、についてはあまり重視していませんでした。まあ「jQuery Mobileとか、Bootstrap とか、適当なフレームワークを適当にカスタマイズして使おう。画像は誰か描いて(苦笑)」程度に考えていた、というレベルです。ぶっちゃけ CSS とか基礎はわかっているつもりだけど自分ではサンプルを作る程度でそれ以上にいじることはほとんどない感じ。悪く言えば見た目は軽視してました。

今の会社では UI や UX を専門に担当するチームがあります。PC 用なのか、スマホ用なのか、レスポンシブデザインにするのかを考慮した上で、画像やグラフなどはピクセルレベルで調整して、必要であれば画像のデザインも行った上で HTML をデザインし、CSS を用意してくれます。僕らはその HTML をテンプレートにして組み込んだり、 CSS はロードして指定するだけ。これにバックエンド処理を加えたり、動的な JavaScript を加えたりしてページを作ります。良くも悪くも分業制を敷いて、それぞれのプロが担当する形です。クーシーの強みは(どちらかを外注するとかではなく)その両方のプロが所属しているところだと思います。

これまでの自分の感覚と比べると、軽視していた半分の作業を専門チームがやってくれている、という感じです。作業は細かいし、さすが質も高いし、そして自分は楽です(その代わり作業人月は増えるけど)。自分があまり注力していなかった分野のプロと接する機会がある、というだけでもすごくいい刺激が得られるし、技術を盗む相手という意味でも頼もしい。そして何よりも自分が担当したサイトやサービスがすごく良さげに見える(笑)。

と、そんな当たり前のことが新鮮な状態から自分にとっても当たり前のように感じつつある今日この頃です。


 

CentOS のローカル環境内に yum のリポジトリを作成する手順を紹介します。


RHEL(RedHat Enterprise Linux) や CentOS を使っている人には「何を今さら」な情報だと思いますが、アプリケーションやモジュールのインストールには rpm や yum を利用することが多いと思います。

特に yum を利用することで、目的のモジュールを導入するために必要となる前提ライブラリが既にインストールされているかどうかをチェックし、更にその前提ライブラリの前提となるライブラリのインストール状況も調べて・・・で、現在の環境に足りないライブラリやモジュールを順次インストールした上で最終的には目的のモジュールまでインストールしてくれます。非常に便利なツールです。

ただ RHEL にせよ CentOS にせよ、その利用の条件として「yum リポジトリ」と呼ばれる一連のファイル環境を用意する必要があります。DVD などからの新規導入時にはその DVD メディアの中に yum リポジトリが含まれていてそのリポジトリを使ってインストールが行われたり、インターネットアクセス環境が整っている場合はインターネット上の yum リポジトリを参照することでインストールを行うことができます。なので、通常はリポジトリの存在をいちいち意識することなく yum を利用することが大半だと思います。

ところが、インターネット接続のない特殊な環境下の場合、最初の導入時こそ DVD 内のメディアリポジトリを利用して指定したアプリケーションやモジュールを導入することになるので何も変わりませんが、その DVD を取り出して再起動した後からは yum リポジトリにアクセスできなくなってしまうため、後から足りないモジュールを追加インストールする際に苦労します。もちろんそこで改めて DVD メディアをマウントすればそのメディアリポジトリを使うことはできますが、わざわざ DVD メディアを再度用意する必要があります。またその場合でもインストールできるのは DVD 内に含まれている(最新版とは限らない)モジュールだけであって、最新モジュールを yum でインストールするには最新モジュールの含まれたリポジトリの DVD メディアを用意する必要があります。要は色々面倒なわけです。

そこでインターネット接続がない場合でも、メディアを意識せずに yum を使えるようにするためにローカル環境のディスクシステム内に yum リポジトリを作る方法を紹介します。この環境を作っておけばとりあえずそのリポジトリに含まれているモジュールについては yum で(依存関係ごと)導入できるようになるし、モジュールのバージョンアップをしたい場合は必要なモジュールをローカルファイルシステム上にコピーした上で再度リポジトリを作成し直せばいい、ということになります。バージョン管理の面倒さこそありますが、ディスク上にリポジトリを作っておくことで DVD メディアやネット経由のリポジトリよりは高速なアクセスが期待できる、というメリットもあります。


では以下にその手順を紹介します:

まずはリポジトリの元になる DVD のインストールメディア(RedHat や CentOS など)を用意します。このメディアが /mnt にマウントされていて、アクセスできる状態(/mnt/Packages/ というフォルダが存在している状態)になっているものと仮定します。

次にリポジトリを作成するディレクトリを用意します。ここでは /usr/tmp/repo/ というフォルダ以下にローカルリポジトリを作成することにします。

というわけで、まずは /usr/tmp/repo を作成しておきます:
# mkdir /usr/tmp/repo/


このディレクトリ内に centos/ サブディレクトリを作ります(これがリポジトリの名称になります):
# mkdir /usr/tmp/repo/centos


更にこのディレクトリ内を DVD と同じ状態にするべく、Packages/ サブディレクトリを作ります:
# mkdir /usr/tmp/repo/centos/Packages


DVD 内のリポジトリに含まれる一連の rpm ファイルを全て用意したディレクトリ以下へコピーします:
# cp /mnt/Packages/*.rpm /usr/tmp/repo/centos/Packages


ここから /usr/tmp/repo をローカルリポジトリにするための設定を行います。まずは rpm を使ってローカルリポジトリ作成に必要なツールだけを単独で3つ導入します:
# cd /usr/tmp/repo/centos/Packages
# rpm -ivh deltarpm-3.5-0.5.2009093git.el6.x86_64.rpm
# rpm -ivh python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
# rpm -ivh createrepo-0.9.8-4.el6.noarch.rpm
(バージョンの数値は用意したメディアによって異なっている可能性があります。適宜読み変えてください)


導入した createrepo を使って、/usr/tmp/repo 以下にローカルレポジトリを作成します:
# cd /usr/tmp/repo
# createrepo .


yum がこのローカルレポジトリを利用できるよう、以下のファイルを新規に作成・編集します:
# vi /etc/yum.repos.d/centos.repo

(以下、/etc/yum.repos.d/centos.repo の内容)
[centos]
gpgcheck=0
name=My Repo
baseurl=file:///usr/tmp/repo


yum リポジトリを更新します:
# yum clean all
# yum list


これでローカルファイルシステム内に centos という名称の yum リポジトリが作成できました。インターネットに繋がっていなくても、インストール DVD メディアがなくても yum を使ったモジュールのインストールが可能になります。


なお、モジュールを新しいものに更新したい場合や、このローカルリポジトリに別の .rpm ファイルを含めたい場合はそれらを /usr/tmp/centos/Packages/ 以下にコピーして、再度 yum リポジトリを更新(上述)すれば新しい内容の yum リポジトリになります。






 

3年前の今頃、震災直前の東京ディズニーランド「春キャン(春のキャンパスデーパスポート)」

今をときめく2人の女優さんが、まだ無名だった頃にこのCMで共演していた:



有村さんと能年さんは同じ事務所に所属していたので、まあ共演自体は珍しいことではないのだと思う。ただそれから2年経ち、社会現象になるような朝のドラマで共演して注目を浴びるようなる、その前の初々しい姿をたまたま見つけることができた。


となると、今やってる2014 年版の春キャンCMにも未来の大スターがいるのでは? と思ってしまう:


一番右の樋口柚子(ひぐちゆず)さんが可愛すぎて死ぬ。

 

このブログエントリの続きです。

SD カードアダプタの皮を被った Linux、CLF-WF01。なぜか標準で telnetd (と ftpd も)が動いていて、パスワード無しで telnet 接続ができることを発見しました。今回はこいつのカスタマイズに挑戦します。

で、そのカスタマイズ方法ですが、実はこの CLF-WF01 のカーネルやユーティリティは最小限に削られているようで、標準状態では vi すら導入されていません。なので telnet で接続しても、そのままカスタマイズに挑むのはちょっと無理があるのでした。

でもここでは先人の知恵を拝借することにしました。実はこの CLF-WF01 で使われているファームウェア(に相当するもの)を解析している方がいらっしゃるようで、とりあえず「とんすけ」様のビルド成果を使わせていただきます: m(__)m
『Flucard でプログラムとかCGIとか』

上記リンク先から deploy_20120420.zip をダウンロード&展開し、出てきた DCIM/122_TREK フォルダを、CLF-WF01 で使うマイクロ SD カードの DCIM フォルダにまるごとコピーします(マイクロ SD カード内に DCIM/122_TREK フォルダができるようにします)。また展開後の直下ディレクトリにある autorun.sh をマイクロ SD カードのルート直下にコピーします。コピーは FTP で行ってもいいですし、マイクロ SD カードのみを取り出して PC に接続し、直接書き込んでも構いません。これで準備はOK。

簡単に解説すると、DCIM/122_TREK 内にこの CLF-WF01 用の vi 等を含めた各種バイナリが用意されており、足りない機能を補充しています。またマイクロ SD カード直下に autorun.sh というファイルがあると、Linux 起動直後に読み込まれて、その中に記述された命令が実行される、という特徴があることが分かっています。この特性を利用して、CLF-WF01 のパスの通ったディレクトリから DCIM/122_TREK 内のバイナリにシンボリックリンクを貼り、命令が直接実行できるように準備しています。またデフォルトでは無効になっていた sshd も起動するようにしています(デフォルトのままアクセスする場合は ID:root , PW:admin)。

この状態で改めて CLF-WF01 の Linux を起動し、PC から無線 LAN で接続してみます。今回は sshd を有効にしているので SSH クライアントからアクセスしてみます(ユーザーID : root, パスワード : admin autorun.sh で変更することも可能です)。
2014012610

おー!ssh クライアントからもアクセスできました。しかも上図のように、このモジュールを使うと PHP 5.3.10 も初めから使える状態になっていて、かなり便利です。

また、/www/cgi-bin/ フォルダ内には CGI 用のプログラムがサンプルでいくつか用意されています。これらのプログラムは CGI 経由でウェブブラウザから利用することもできます。自分で CGI など作る場合はここに入れておけばいいわけね:
2014012611

個人的にはここまでの環境ができれば充分すぎる感じ。とんすけ様、便利なツールの提供ありがとうございます!







 

秋葉原で久しぶりに面白そうなアイテムをゲット!
2014012601

株式会社デジナビから発売されている CloudFlash (型番 CLF-WF01)という製品です:



SD カードアダプタのような形状をしていて、実際にマイクロSDカードを挿入して使います。ただし、単なる SD カードアダプタではありません。本体にも "Wireless LAN" の記述がありますが、最大の特徴はこの CLF-WF01 自体が無線 LAN サーバーになる機能を持っています。要はデジタルカメラなどに装着する SD カードをこの CLF-WF01 にすると、そのデジタルカメラが無線 LAN サーバーになって、PC や iPhone, スマホと直接接続してマイクロ SD カード内の画像/動画データの送受信ができるようになる、というものです。最近のデジカメには標準で無線 LAN 機能が付いているものもありますが、この CLF-WF01 はその外付け機能の役割を担うことになります。ウェブサイトはこちら
 
実際に使ってみるとこんな感じになります。まずは CLF-WF01 をデジカメに装着してプレビューモードで起動すると、無線 LAN ステーションになります。そのステーションに対して、例えば PC から専用の SSID に接続します。
2014012602

(注 この段階で PC と CLF-WF01 とが無線 LAN で接続されたことになりますが、その間は PC からはインターネットにアクセスすることはできず、CLF-WF01 にだけアクセスすることができます。インターネットにアクセスするにはこの接続を一旦切断して、改めて PC をインターネットの使える SSID に接続し直す必要があります)


 この状態で PC からは "http://192.168.1.1/" にブラウザでアクセスすることで CLF-WF01 の HTTPD サーバーに接続できます。各種設定変更もこの画面から行うことが可能です。
2014012603

もちろんこの画面からマイクロ SD カード内のデータにアクセスすることも可能です。今回は画像以外のデータも含まれているマイクロ SD カードを使ったので画面が乱れていますが、デジカメ専用のマイクロ SD カードであれば、ここでサムネイル画面が表示され、ここから PC 内にダウンロードすることも可能です。
2014012604

上記例では PC からの利用方法を紹介しましたが、iPhone やスマホからは専用アプリをダウンロードして使うことでより簡単にデジカメのマイクロ SD カード内にアクセスすることができます。 これでデジカメで撮った写真をいちいちカードを取り外して PC に取り込んだり、そこから更に iPhone やスマホに取り込む、、なんて作業を行う必要はなくなります。直接デジカメから取り出せるようになるので、確かに便利なツールだと思います。


ここまでが普通のレビューですね。本番はここから下です。

ただ僕が試したかったのはこういう使い方ではなく、この CLF-WF01 をハックすることです。とりあえず HTTP サーバーが動いていることは確実なので、なんらかの OS があって、その上で HTTP サービスが稼働しているということです。ということは telnetd が動いている可能性もあるよね。。

というわけで試してみよう(笑)。アドレスは 192.168.1.1 だと分かっているので直接やったれ:
2014012605

で、Enter キー。すると・・・
2014012606

ユーザー ID もパスワードも聞かれずにログインできてしまった。しかも root で(笑)。
2014012607

SD カードは /mnt/sd にマウントされてるっぽいことも確認。パーティションサイズも一致しているので恐らく合ってる:
2014012608

ハードウェアの種類と OS のバージョンを調べてみた。CPU は ARM 版で、Ubuntu-Desktop ベースの Linux 2.6.32 が使われてるっぽい。
2014012609

つまりこの CLF-WF01 は SD カードアダプタ型の Ubuntu(Linux) だったということです。

なかなか興味深いが今日はここまで。
これで PHP とか CGI とか動いたら面白そうだ。

追記  続きはこちら

このページのトップヘ