Ubuntu Weekly Recipe

第400回Ubuntuで「からあげ」なんとかする

当連載「Ubuntu Weekly Recipe」は、今回でちょうど400回となります。ここまで続いたのも、いつもアクセスしてくださる読者の皆さま、掲載を続けてくれる技術評論社様、これまでさまざまな記事を執筆してきた著者陣のおかげです。さて、400回ではありますが、何ら特別なことはない、いつもどおりの記事をお届けします。

なぜ「からあげ」なのか?

いつもなら第100回第200回第300回のように、キリのいい回には「特別企画」と題して特別な人による、ちょっと特別な連載を掲載していました。ただ今回はいろいろと立て込んでいて企画できなかったため、チーム内で誰も手を挙げなければ普通のRecipeでいいかなと考えていたのです。ところが先週の月曜夜、第399回の記事を提出した[1]前回担当のいくやさんが、曇りのない期待した眼差し(via メール)「次はいよいよ400回ですね……!」⁠意訳:だからきっと普通じゃないネタ用意していますよね!)と仰るではないですか。

それを受けて、急遽チーム内でネタが出されました。実際にいろいろ調べたり、動かしたりと検討がなされたのですが、いかんせん時間が足りないということで、特別企画としては断念することになった次第です。ボツになったネタは近いうちにきっと誰かが書いてくれることでしょう。

そこで特別企画はできないものの、多少はそれっぽくするために時事ネタでもと考えて最初に出てきた単語が「からあげ」です。

実はUbuntu Weekly Topicsの11月27日号でもお伝えしたように、グリー株式会社主催のもとUbuntu 15.10を記念したオフラインミーティングを12月12日に開催します(現在は参加者・発表者を募集中ですので、ふるってご参加ください⁠⁠。このオフラインミーティングでは、ランチもかねて毎回ちょっとした軽食を提供しています。そのうち「からあげ」は参加者の数に増減に関係なく、回を重ねるごとにひたすら増量を繰り返しているのです。そんなイベントの「からあげ」事情を暴露したツイートが1000RTを超えるという、担当者の心に傷を残す出来事が発生しました。イベント案内のツイートはたかだか20RT程度だったのに。

心の傷はともかくとして、⁠からあげ」ネタは注目されることがわかったので、⁠からあげ」をタイトルに入れた何かを書いてみようと思ったのが今回Recipeです。

「からあげ」探しの舞台裏

タイトルは決まりましたが、内容がまったく決まっていません。よって無理やりにでもUbuntuにからあげを絡める方法を探す必要があります。Ubuntuとからあげといえば本連載でもおなじみのEmacsとお酒をこよなく愛する水野さんですが、水野さんそのものをRecipeの記事にすることはできません。……できませんよね?

とりあえずは定石通り、リポジトリからそれっぽいパッケージを探してみることにしましょう。なーに、寿司鉄火巻きちらし寿司があるのですから、からあげもいくつかあるはずです。

$ apt-cache search karaage
$ apt-cache search fried chicken
$ apt-cache search chicken
texlive-luatex - TeX Live: LuaTeX packages
swig - スクリプト言語向けに C/C++ のコードのインターフェースを生成
swig2.0 - スクリプト言語向けに C/C++ のコードのインターフェースを生成
chicken-bin - Practical and portable Scheme system - compiler
libchicken-dev - Practical and portable Scheme system - development
libchicken6 - Practical and portable Scheme system - runtime
gtk2-engines-magicchicken - GTK+ 2.x 用 Magic Chicken テーマ集
swig3.0 - Generate scripting interfaces to C/C++ code

そのものずばりというものはありませんね。一応Schemeの処理系であるChickenがあるので、これを揚げればからあげにはできそうです。しかし、処理系を揚げる方法をどうするか。

そこで、リポジトリにないのなら、Google先生に相談することにしましょう。

図1 からあげという名称のプロジェクトを発見。
画像

あっさりKaraageというプロジェクトが見つかりました。どうやらクラスター向けのアカウント管理を行うソフトウェアという位置づけのようです。実際はSlurmPBS/TORQUEといったスーパーコンピューターなどの大規模クラスターで使われているリソース管理ツール用のUIとして使うみたいです。Karaageそのものは、Pythonで書かれたDjangoプロジェクトでした。

今回はこれをUbuntuにインストールすることにしましょう[2]⁠。

Karaage - アカウント管理ソフトウェア

Karaageのインストール先はUbuntu 14.04 LTSとします。インストールガイドには、Debian Jessie用の非公式リポジトリを使う方法が紹介されていますが、14.04の場合はいくつか必要なパッケージが足りないために使えません[3]⁠。そこで今回は、Pythonソフトウェアをpipコマンドでインストールすることにします。

KaraageはPythonのWebフレームワークであるDjangoを使っています。よって最低限必要なものはPython処理系だけです。ただし、インストールガイドではWebサーバーとしてApache2/WSGI、データベースとしてMySQLを使っているため、この記事もそれを利用することにします。

Apache2のインストールはとても簡単です。SSL接続もできるようにしています。SSL証明書はssl-certパッケージをインストールした時に自動生成されるsankeoilの自己署名証明書を使うことにしましょう。SSL証明書関連の詳しいことは第387回を参照してください。

$ sudo apt-get install apache2 libapache2-mod-wsgi
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo service apache2 restart

MySQLもリポジトリからインストールします。インストール時、MySQLのルートパスワードを問われるので、適切な値を設定しておきましょう。ここでは「KARAAGE」としておきます。

$ sudo apt-get install mysql-server

MySQLの設定ファイル(/etc/mysql/conf.d/karaage.cnf)を作成します。

[mysqld]
character_set_server=utf8
default-storage-engine = innodb
sql_mode = STRICT_ALL_TABLES

[client]
default-character-set = utf8

最後に、次のようにデータベースとユーザーを作成します。⁠-pKARAAGE」はMySQLのルートパスワードに置き換えてください。

$ mysql -uroot -pkaraage
mysql> create database karaage;
mysql> CREATE USER 'karaage'@'localhost' IDENTIFIED BY 'karaage';
mysql> GRANT ALL PRIVILEGES ON karaage.* TO 'karaage'@'localhost';

下準備が整いましたので、Karaageをインストールします。pipコマンドはPyPIからだけでなく、GitHubなどからのインストールもサポートしています[4]⁠。よってpipコマンド用にpython-pipとgitパッケージをインストールしましょう。python-mysqldbとpython-pilはKaraageの設定によって必要になるパッケージです。

$ sudo apt-get install python-pip git python-mysqldb python-pil
$ sudo pip install git+git://github.com/Karaage-Cluster/karaage.git#egg=karaage
(中略)
Successfully installed karaage cssmin Django python-alogger django-xmlrpc django-simple-captcha django-ajax-selects django-jsonfield django-model-utils python-tldap django-pipeline django-tables2 django-filter slimit ldap3 passlib futures ply pyasn1

これでインストール完了です。⁠/usr/local」以下に上記のようなPythonパッケージがインストールされていることがわかります。次に「/etc/karaage3/settings.py」を編集して、Karaageの設定を行いましょう。変更箇所のみを列挙します。個々の設定について詳しくは公式ドキュメントを参照してください。

# FQDNのホスト名を設定します。
# ローカルでの動作確認のみであれば、
# /etc/hostsにkaraage.example.orgを追加しておくとよいでしょう。
#
HTTP_HOST = "karaage.example.org"

# Djangoのより新しいバージョンはHTTPリクエストのHostsヘッダーが、
# ALLOWED_HOSTSと一致しないとエラーとなります。外部からIPアドレスなどで
# アクセスする場合、そのIPアドレスをALLOWED_HOSTSにリストアップしましょう。
#
ALLOWED_HOSTS = ["10.0.3.65"]

# データベースの設定です。
# MySQLのデータベース設定時に作成したデータベース名と
# ユーザー名・パスワードを指定してください。
#
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'karaage',
        'USER': 'karaage',
        'PASSWORD': 'karaage',
        'HOST': 'localhost',
        'PORT': '',
        'ATOMIC_REQUESTS': True,
    }
}

# Djangoのプロジェクトで使う秘密鍵です。
# 予測不能なランダムな文字列であればいいので、次のように生成して
# 埋め込んでおくとよいでしょう。
# $ cat /dev/urandom | fold -w 32 | head -n 1 | base64
#
SECRET_KEY = 'ey5iM7WFA8Dkdo1G4cGMtkN3O7OeqdbtU1/+ANTAipoK'

また、Djangoプロジェクトで使ういくつかのディレクトリを作成しておきます。

$ sudo mkdir -p /var/log/karaage3 /var/cache/karaage3/{files,tmp} /var/lib/karaage3/static
$ sudo chown -R www-data: /var/{cache,log,lib}/karaage3

設定が一通り完了したので、Karaageのマイグレーションを行います。

$ sudo kg-manage migrate
(中略)

Running migrations:
  Rendering model states... DONE
  Applying captcha.0001_initial... OK
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying karaage.0001_initial... OK
  Applying karaage.0002_auto_20140924_1111... OK
  Applying karaage.0003_auto_20150410_1032... OK
  Applying methods.0001_initial... OK
  Applying sessions.0001_initial... OK
  Applying sites.0001_initial... OK

また、Karaageの管理者を作成します。

$ sudo kg-manage kgcreatesuperuser
Username: karaage
E-mail address: karaage@example.com
Password: 
Password (again): 
Short Name: karaage
Full Name: Ubuntu Karaage
No Institutes in system, will create one now.

Institute Name: ubuntu
Created new group ubuntu.
Created new institute ubuntu.
Karaage Superuser created successfully.

最後にKaraage用のWSGI設定(/etc/apache2/conf-available/karaage3-wsgi.conf)を有効化し、Apacheサービスをリロードします[5]⁠。

$ sudo a2enconf karaage3-wsgi
$ sudo service apache2 reload

「https://マシンのアドレス/karaage」にアクセスするとKaraageの初期画面が表示されるはずです。さらに右上の「Log In」から先ほど作成した管理者のユーザー名とパスワードでログインできます。

図2 Karaageの初期画面
画像
図3 Karaageのログイン画面
画像
図4 Karaageの基本画面
画像

Karaageにはプラグイン機能が存在します。これを使うとユーザーアカウントの管理だけでなく、利用状況の表示なども行えるようになります。これらのインストール方法もあわせて紹介しておきましょう。

まずusageプラグインで使うpython-mattplotlibパッケージをインストールしたあとに、3つのプラグインを順番にインストールしていきます。

$ sudo apt-get install python-matplotlib
$ sudo pip install git+git://github.com/Karaage-Cluster/karaage-applications.git#egg=karaage-applications
$ sudo pip install git+git://github.com/Karaage-Cluster/karaage-software.git#egg=karaage-software
$ sudo pip install git+git://github.com/Karaage-Cluster/karaage-usage.git#egg=karaage-usage

さらにpipからインストールできるdjango-table2には問題があるためパッチを適用します。

$ wget https://github.com/bdauvergne/django-tables2/commit/423a74702c7bff58cbe8f9078c5241b99ba3bb77.patch
$ sudo patch -d /usr/local/lib/python2.7/dist-packages/ -p1 < ~/423a74702c7bff58cbe8f9078c5241b99ba3bb77.patch

設定ファイル(/etc/karaage3/settings.py)に有効するプラグインを列挙します。

PLUGINS = [
    'karaage.plugins.kgapplications.plugin',
    'karaage.plugins.kgsoftware.plugin',
    'karaage.plugins.kgsoftware.applications.plugin',
    'karaage.plugins.kgusage.plugin',
]

マイグレーションとApacheのリロードを行います。

$ sudo kg-manage migrate
$ sudo service apache2 reload

最後に分散タスクキューであるCeleryを起動するスクリプトをインストールして起動しましょう。

$ wget https://raw.githubusercontent.com/Karaage-Cluster/karaage-usage/master/debian/karaage3-celery.default
$ wget https://raw.githubusercontent.com/Karaage-Cluster/karaage-usage/master/debian/karaage3-celery.init
$ sudo mv karaage3-celery.default /etc/default/karaage3-celery
$ sudo mv karaage3-celery.init /etc/init.d/karaage3-celery
$ sudo chmod 755 /etc/init.d/karaage3-celery
$ sudo service karaage3-celery start

Karaageのウェブページをリロードすると、サイドバーに有効にしたプラグインが追加されているはずです。

最後の仕上げ

ここまで説明しておいてなんですが、このKaraage、単体ではあまり使えません。最初の方で言及したように、SlurmやPBS/TORQUEなどと併用して初めて便利になります。いずれもパッケージ化されているので、導入自体は簡単です。KaraageとSlurmやPBS/TORQUEの間は、KaraageにData Storeを作成しLDAP over TLSを設定して連携する必要があります。

このままではあまり実用的でない上に、⁠からあげ」っぽくないので、⁠からあげ」画像で装飾することにしましょう。実はDjangoには、生成されるページにからあげ画像を表示するミドルウェアが存在します。よく読み取れなかった方のためにもう一度、生成されるページにからあげ画像を表示するミドルウェア 」が存在するのです。

さっそくインストールしましょう。こちらもKaraageと同じくpipコマンドでインストールします。karaage.jsはインストールされなかったので手動でインストールしています。

$ sudo pip install git+git://github.com/drillbits/django-karaage.git#egg=django-karaage
$ wget https://raw.githubusercontent.com/drillbits/django-karaage/master/django_karaage/karaage.js
$ sudo cp karaage.js /usr/local/lib/python2.7/dist-packages/django_karaage/

設定ファイル(/etc/karaage3/settings.py)のMIDDLEWARE_CLASSESに有効するミドルウェアを列挙します。MIDDLEWARE_CLASSESはもともと次のファイルで設定されています。

/usr/local/lib/python2.7/dist-packages/karaage/conf/defaults.py

これをそのままsettings.pyにコピー&ペーストして、最後にdjango_karaageを追加します。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.middleware.common.BrokenLinkEmailsMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'karaage.middleware.threadlocals.ThreadLocals',
    'karaage.middleware.saml.SamlUserMiddleware',
    'tldap.middleware.TransactionMiddleware',
    'django_karaage.middleware.KaraageMiddleware',
)

最後にApache2をリロードすれば設定完了です。

$ sudo service apache2 reload

ちなみにsettings.pyの中でKARAAGE_IMAGE_URLにからあげ画像のURLをセットすれば、任意のからあげ画像を表示できます。

図5 ページを蹂躙するからあげ画像
画像

おすすめ記事

記事・ニュース一覧