<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>taichino.com &#187; linux</title>
	<atom:link href="http://taichino.com/category/engineer-life/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://taichino.com</link>
	<description>永遠のネバーランド</description>
	<lastBuildDate>Sat, 04 Feb 2012 13:33:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>OSXでnginxを動かすメモ</title>
		<link>http://taichino.com/engineer-life/2212</link>
		<comments>http://taichino.com/engineer-life/2212#comments</comments>
		<pubDate>Sun, 05 Jun 2011 13:58:45 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[技術]]></category>
		<category><![CDATA[launchctl]]></category>
		<category><![CDATA[launchd]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=2212</guid>
		<description><![CDATA[先日CentOS上でnginxを使うというエントリを書きましたが、開発環境のOSXにnginxをインストールするのに手間取ったのでメモ書きです。 まずはnginxユーザとグループを作成します。adduserはないので、dsclコマンドを使います。面倒ですが、パラメータを一つずつ設定していく感じのようですね。 $ dscl . -list /Groups PrimaryGroupID &#124; sort -k 2 -n # 開いているIDを確認 $ sudo dscl . -create /Groups/nginx PrimaryGroupID 1001 $ sudo dscl . -create /Users/nginx UniqueID 1001 $ sudo dscl . -create /Users/nginx PrimaryGroupID 1001 $ sudo dscl . -create /Users/nginx UserShell /usr/bin/false 続いてnginxをインストールします。これはlinux上での作業と同じですね。 $ curl -O http://nginx.org/download/nginx-1.0.3.tar.gz $ tar zxvf [...]]]></description>
			<content:encoded><![CDATA[<p>先日<a href="http://taichino.com/engineer-life/linux/2170">CentOS上でnginxを使うというエントリ</a>を書きましたが、開発環境のOSXにnginxをインストールするのに手間取ったのでメモ書きです。</p>
<p><span id="more-2212"></span></p>
<p>まずはnginxユーザとグループを作成します。adduserはないので、dsclコマンドを使います。面倒ですが、パラメータを一つずつ設定していく感じのようですね。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ dscl . <span style="color: #660033;">-list</span> <span style="color: #000000; font-weight: bold;">/</span>Groups PrimaryGroupID <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-k</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-n</span>  <span style="color: #666666; font-style: italic;"># 開いているIDを確認</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> dscl . <span style="color: #660033;">-create</span> <span style="color: #000000; font-weight: bold;">/</span>Groups<span style="color: #000000; font-weight: bold;">/</span>nginx PrimaryGroupID <span style="color: #000000;">1001</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> dscl . <span style="color: #660033;">-create</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>nginx UniqueID <span style="color: #000000;">1001</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> dscl . <span style="color: #660033;">-create</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>nginx PrimaryGroupID <span style="color: #000000;">1001</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> dscl . <span style="color: #660033;">-create</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>nginx UserShell <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">false</span></pre></div></div>

<p>続いてnginxをインストールします。これはlinux上での作業と同じですね。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ curl <span style="color: #660033;">-O</span> http:<span style="color: #000000; font-weight: bold;">//</span>nginx.org<span style="color: #000000; font-weight: bold;">/</span>download<span style="color: #000000; font-weight: bold;">/</span>nginx-1.0.3.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf nginx-1.0.3.tar.gz
$ <span style="color: #7a0874; font-weight: bold;">cd</span> nginx-1.0.3
$ .<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--conf-path</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx.conf <span style="color: #660033;">--user</span>=nginx <span style="color: #660033;">--group</span>=nginx
$ <span style="color: #c20cb9; font-weight: bold;">make</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>さてインストールしたnginxをデーモンとして扱いたい訳ですが、OSXにはinit.dな仕組みがありません。代わりにlaunchdとlaunchctlを使うようです。launchd周辺については、<a href="http://www.itmedia.co.jp/enterprise/articles/0704/26/news009.html">itmediaにわかりやすい記事</a>があったので、とりあえず読んだら良いと思います。</p>
<p>launchdにデーモンを登録する際に必要なことは、登録したいデーモンの情報を記述したplistファイルを作成して適切なディレクトリに置くという事です。今回は以下のファイルを作成しました。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;">&lt; ?xml <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;">&lt; !DOCTYPE plist PUBLIC <span style="color: #ff0000;">&quot;-//Apple//DTD PLIST 1.0//EN&quot;</span> </span>
<span style="color: #009900;">                       <span style="color: #ff0000;">&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plist</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Label<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.nginx.nginx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Program<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/usr/local/nginx/sbin/nginx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>KeepAlive<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dict<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>NetworkState<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;true</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>StandardErrorPath<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/var/log/system.log<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>LaunchOnlyOnce<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;true</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plist<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>また作成した設定ファイルを置ける場所は複数あって、どこが正しい場所なのか迷っていたのですが、launchdのmanを見ると以下の記述がありました。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System-wide daemons provided by the administrator.
/System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
/System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.</pre></div></div>

<p>この感じだと/Library/LaunchDaemonsに入れたら良さそうです。この後以下のコマンドを実行すればサービスの登録が完了します。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> launchctl load <span style="color: #660033;">-w</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>LaunchDaemons<span style="color: #000000; font-weight: bold;">/</span>org.nginx.nginx.plist</pre></div></div>

<p>以上で、nginxがOSX上で動くようになりました。ただ現状、手元ではlaunchctlコマンドからnginxの再起動やリロードが上手く行きません。開発環境なので、とりあえず放置する事にしましたが、サービス周辺の仕組みがlinuxと比べるとなんか複雑でイマイチだなぁ、という印象です。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/engineer-life/2212/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOSでnginx + uwsgi + Djangoを試してみた</title>
		<link>http://taichino.com/engineer-life/linux/2170</link>
		<comments>http://taichino.com/engineer-life/linux/2170#comments</comments>
		<pubDate>Wed, 01 Jun 2011 16:22:46 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[uwsgi]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=2170</guid>
		<description><![CDATA[最近GAE上で書いていたサイトが、ちょっとGAEには向かないという事がわかりまして、仕方が無いので、普通のサーバ上で書き直す事にしました。巷ではapache + mod_pythonはもう古いらしく、じゃあ何が良いのと思って色々調べていると、このベンチマークエントリが見つかりまして、その中で良さそうだったuwsgiを使う事にしました。HTTPサーバは上記エントリで使われてたnginxです。ずっと気になっていたのでこの機会に触ってみました。なお環境はCentOS 5.5です。 思ったよりも長い記事になってしまいました。以下の手順を踏みます。 Pythonのインストール virtualenvやDjangoのインストールとテストプロジェクト作成 uwsgiのインストール nginxのインストール・設定・動作確認 Djangoのadminアプリを動かす(おまけ) 1. Pythonのインストール CentOSはデフォルトのPythonのバージョンが古いので、まずはPythonをインストールします。make時の足りないモジュール系のエラーは無視します。 $ sudo yum install zlib-devel bzip2-devel readline-devel sqlite-devel $ curl -O http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz $ tar zxvf Python-2.6.6.tgz $ cd Python-2.6.6/ $ ./configure $ make Failed to find the necessary bits to build these modules: _bsddb _hashlib _ssl _tkinter bsddb185 dbm dl gdbm imageop [...]]]></description>
			<content:encoded><![CDATA[<p>最近GAE上で書いていたサイトが、ちょっとGAEには向かないという事がわかりまして、仕方が無いので、普通のサーバ上で書き直す事にしました。巷ではapache + mod_pythonはもう古いらしく、じゃあ何が良いのと思って色々調べていると、<a href="http://nichol.as/benchmark-of-python-web-servers">このベンチマークエントリ</a>が見つかりまして、その中で良さそうだったuwsgiを使う事にしました。HTTPサーバは上記エントリで使われてたnginxです。ずっと気になっていたのでこの機会に触ってみました。なお環境はCentOS 5.5です。</p>
<p>思ったよりも長い記事になってしまいました。以下の手順を踏みます。</p>
<ol>
<li>Pythonのインストール</li>
<li>virtualenvやDjangoのインストールとテストプロジェクト作成</li>
<li>uwsgiのインストール</li>
<li>nginxのインストール・設定・動作確認</li>
<li>Djangoのadminアプリを動かす(おまけ)</li>
</ol>
<p><span id="more-2170"></span><br />
<strong>1. Pythonのインストール</strong><br />
CentOSはデフォルトのPythonのバージョンが古いので、まずはPythonをインストールします。make時の足りないモジュール系のエラーは無視します。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> yum <span style="color: #c20cb9; font-weight: bold;">install</span> zlib-devel bzip2-devel readline-devel sqlite-devel
$ curl <span style="color: #660033;">-O</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.python.org<span style="color: #000000; font-weight: bold;">/</span>ftp<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>2.6.6<span style="color: #000000; font-weight: bold;">/</span>Python-2.6.6.tgz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf Python-2.6.6.tgz
$ <span style="color: #7a0874; font-weight: bold;">cd</span> Python-2.6.6<span style="color: #000000; font-weight: bold;">/</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>configure
$ <span style="color: #c20cb9; font-weight: bold;">make</span>
Failed to <span style="color: #c20cb9; font-weight: bold;">find</span> the necessary bits to build these modules:
_bsddb             _hashlib           _ssl
_tkinter           bsddb185           dbm
dl                 gdbm               imageop
sunaudiodev
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p><strong>2. virtualenvやDjangoのインストールとテストプロジェクト作成</strong><br />
続いてdistribute, virtualenv, Djangoのインストールし、Djangoのプロジェクトを作成しておきます。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># distribute</span>
$ curl <span style="color: #660033;">-O</span> http:<span style="color: #000000; font-weight: bold;">//</span>python-distribute.org<span style="color: #000000; font-weight: bold;">/</span>distribute_setup.py
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> python distribute_setup.py
&nbsp;
<span style="color: #666666; font-style: italic;"># virtualenvと仮想環境設定</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> easy_install virtualenv
$ virtualenv <span style="color: #660033;">--distribute</span> <span style="color: #660033;">--no-site-packages</span> <span style="color: #660033;">--python</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python2.6 ~<span style="color: #000000; font-weight: bold;">/</span>py26
$ <span style="color: #7a0874; font-weight: bold;">source</span> ~<span style="color: #000000; font-weight: bold;">/</span>py26<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>activate
&nbsp;
<span style="color: #666666; font-style: italic;"># Djangoのインストールとプロジェクト作成</span>
$ pip <span style="color: #c20cb9; font-weight: bold;">install</span> Django
$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>py26
$ django-admin startproject test_proj
&nbsp;
<span style="color: #666666; font-style: italic;"># 起動して動作確認</span>
$ python test_proj<span style="color: #000000; font-weight: bold;">/</span>manage.py runserver</pre></div></div>

<p>この状態でブラウザなどでlocalhost:8000にアクセスし、DjangoのCongratulations画面が出る事を確認します。</p>
<p><strong>3. uwsgiのインストール</strong><br />
次にuwsgiをインストールします。エントリを書いてから気づきましたが、現バージョンはpipでインストールできるようですのでそちらを使いましょう。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> yum <span style="color: #c20cb9; font-weight: bold;">install</span> libxml2-devel
$ curl <span style="color: #660033;">-O</span> http:<span style="color: #000000; font-weight: bold;">//</span>projects.unbit.it<span style="color: #000000; font-weight: bold;">/</span>downloads<span style="color: #000000; font-weight: bold;">/</span>uwsgi-0.9.7.2.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf uwsgi-0.9.7.2.tar.gz
$ <span style="color: #7a0874; font-weight: bold;">cd</span> uwsgi-0.9.7.2
$ <span style="color: #c20cb9; font-weight: bold;">make</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> uwsgi <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>.</pre></div></div>

<p>単体で動作確認の方法はよくわかりませんでした。またDjangoをuwsgiから起動するためのコードを少し書いておく必要があります。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># /home/taichino/py26/test_proj/wsgi_app.py</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">site</span>
&nbsp;
<span style="color: #dc143c;">site</span>.<span style="color: black;">addsitedir</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/taichino/py26/lib/python2.6/site-packages'</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'settings'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><strong>4. nginxのインストール・設定・動作確認</strong><br />
さらにnginxをインストールします。古いバージョンだとコンパイル時にuwsgiモジュールを組み込む必要があるらしいですが、最近は標準で組み込まれているので、普通にコンパイルすれば良さそうです。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> yum <span style="color: #c20cb9; font-weight: bold;">install</span> pcre-devel
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>useradd <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>nologin <span style="color: #660033;">-M</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>tmp nginx
$ curl <span style="color: #660033;">-O</span> http:<span style="color: #000000; font-weight: bold;">//</span>nginx.org<span style="color: #000000; font-weight: bold;">/</span>download<span style="color: #000000; font-weight: bold;">/</span>nginx-1.0.3.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf nginx-1.0.3.tar.gz
$ <span style="color: #7a0874; font-weight: bold;">cd</span> nginx-1.0.3
$ .<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--conf-path</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>nginx.conf <span style="color: #660033;">--user</span>=nginx <span style="color: #660033;">--group</span>=nginx
$ <span style="color: #c20cb9; font-weight: bold;">make</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>このままだとserviceコマンドでstart/stopなどができないので、<a href="http://wiki.nginx.org/RedHatNginxInitScript">ココ</a>からサービス起動スクリプトをダウンロードして/etc/init.d/nginxに置きます。</p>
<p>さっそく確認してみましょう。下記コマンドでサーバ起動後、localhost:80にアクセスして、welcome画面が出たら成功です。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>service nginx start
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>service nginx start</pre></div></div>

<p>続いてnginxの設定ファイルを編集します。/etc/nginx/nginx.confを編集して以下な感じにしました。とりあえず動けば良いという事で適当です。uwsgi_passにはunix socketも指定できるのですが、nginxとuwsgiをユーザやグループなどを気にしながら動かすのが面倒だったのでtcp socketを使う事にしました。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">user  nobody;
worker_processes  1;
&nbsp;
events {
    worker_connections  1024;
}
&nbsp;
http {
    include       mime.types;
    sendfile        on;
    keepalive_timeout  65;
&nbsp;
    server {
        listen       80;
        server_name  localhost;
&nbsp;
        location / {
            include uwsgi_params;
	    uwsgi_pass 127.0.0.1:4000; 
        }
&nbsp;
        location ^~ /static {
            root /home/taichino/py26/test_proj;
        }
&nbsp;
        location /static/admin {
            alias /home/taichino/py26/lib/python2.6/site-packages/django/contrib/admin/media;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}</pre></div></div>

<p>動作確認のため、以下の手順を踏んでからlocalhostにアクセスしてみます。先ほども見たCongratulations画面が出れば成功です。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># nginxの再起動</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>service nginx restart
&nbsp;
<span style="color: #666666; font-style: italic;"># uwsgiの起動</span>
$ <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>uwsgi <span style="color: #660033;">-s</span> 127.0.0.1:<span style="color: #000000;">4000</span> <span style="color: #660033;">--pp</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>taichino<span style="color: #000000; font-weight: bold;">/</span>py26 <span style="color: #660033;">--module</span> test_proj.wsgi_app</pre></div></div>

<p>以上で80番ポートへのHTTPアクセスをnginxが受けて、uwsgi経由でDjangoにリクエストという流れが動きました。</p>
<p><strong>5. Djangoのadminアプリを動かす(おまけ)</strong><br />
ついでにDjangoのadmin画面が出るところまで書いておきます。test_proj/settings.pyとtest_proj/urls.pyを編集して、データベースの設定とadminアプリ有効化を行います。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># test_proj/settings.py</span>
...
&nbsp;
<span style="color: black;">DATABASES</span> = <span style="color: black;">&#123;</span>
    <span style="color: #483d8b;">'default'</span>: <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'ENGINE'</span>: <span style="color: #483d8b;">'django.db.backends.sqlite3'</span>, <span style="color: #808080; font-style: italic;"># Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.</span>
        <span style="color: #483d8b;">'NAME'</span>: <span style="color: #483d8b;">'data.sqlite'</span>,                      <span style="color: #808080; font-style: italic;"># Or path to database file if using sqlite3.</span>
        <span style="color: #483d8b;">'USER'</span>: <span style="color: #483d8b;">''</span>,                      <span style="color: #808080; font-style: italic;"># Not used with sqlite3.</span>
        <span style="color: #483d8b;">'PASSWORD'</span>: <span style="color: #483d8b;">''</span>,                  <span style="color: #808080; font-style: italic;"># Not used with sqlite3.</span>
        <span style="color: #483d8b;">'HOST'</span>: <span style="color: #483d8b;">''</span>,                      <span style="color: #808080; font-style: italic;"># Set to empty string for localhost. Not used with sqlite3.</span>
        <span style="color: #483d8b;">'PORT'</span>: <span style="color: #483d8b;">''</span>,                      <span style="color: #808080; font-style: italic;"># Set to empty string for default. Not used with sqlite3.</span>
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>
&nbsp;
...
&nbsp;
<span style="color: black;">INSTALLED_APPS</span> = <span style="color: black;">&#40;</span>
    ...
    <span style="color: #483d8b;">'django.contrib.admin'</span>,
<span style="color: black;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># test_proj/urls.py</span>
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">contrib</span> <span style="color: #ff7700;font-weight:bold;">import</span> admin
admin.<span style="color: black;">autodiscover</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
urlpatterns = patterns<span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>,
    url<span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^admin/'</span>, include<span style="color: black;">&#40;</span>admin.<span style="color: #dc143c;">site</span>.<span style="color: black;">urls</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>,
<span style="color: black;">&#41;</span></pre></div></div>

<p>後はsyncdbしてからuwsgiを再度起動します。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ python manage.py syncdb
$ <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>uwsgi <span style="color: #660033;">-s</span> 127.0.0.1:<span style="color: #000000;">4000</span> <span style="color: #660033;">--pp</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>taichino<span style="color: #000000; font-weight: bold;">/</span>py26 <span style="color: #660033;">--module</span> test_proj.wsgi_app</pre></div></div>

<p>http://localhost/adminにアクセスしてログイン画面が出れば成功です。淡々と書きましたがstaticファイルをnginxにハンドルさせる部分でめちゃくちゃハマりました。結局adminアプリのcssやimgなどが置かれているパスへ、nginxを動かしているユーザからアクセスできなかっただけでした。今回のように特定ユーザのhomeディレクトリでDjangoを動かす場合は注意しましょう。</p>
<p><strong>まとめ</strong><br />
nginxは思ったより使い勝手がいい印象です。しばらくはnginx一択で生活したいと思います。uwsgiはまだよくわかりません。Djangoにはfastcgiが組み込まれているので、あまり違いが無いのであればそちらの方が良いと思います。あとuwsgiの情報は、古いバージョンに対するものが多いので<a href="http://projects.unbit.it/uwsgi/">本家のドキュメント</a>見ましょう。</p>
<p>とりあえずサイト書ける感じにはなりました。mod_pythonやfastcgi等と比べてどれくらいパフォーマンスが違うのか自分でも確認したいですが、測定はまたの機会に。とりあえず作りかけのサイトを最後まで書こうと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/engineer-life/linux/2170/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sshdに対するブルートフォース攻撃のユーザ名が面白い件</title>
		<link>http://taichino.com/engineer-life/1993</link>
		<comments>http://taichino.com/engineer-life/1993#comments</comments>
		<pubDate>Sun, 03 Oct 2010 16:33:50 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[技術]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sshd]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1993</guid>
		<description><![CDATA[1ヶ月前に借りたホストを、そろそろ使い始めようかと思って設定している最中に、ふとログを見てみるとsecure*が合計で60MBとかになってて、何これと思ってみて見ると全部sshdに対するBrute force attackのログでした。話には聞いていましたが自分のホストに実際に大量のログが見えると、あぁ攻撃は実在のものであったかと大変興味深いものがあります。しばらくtail -fしてログを眺めていると次から次へとバンバンログが溜まって行きました。そのユーザ名が色とりどりで面白かったので、折角と言う事でどんなユーザ名でログイントライするのかと言うのを調べてみました。以下が上位20件です。左側の数字は、そのユーザ名でログインに失敗した回数です。adminとtestは1000回超えてます。 $ cat secure* &#124; grep &#34;invalid user .* from&#34; &#124; column -t &#124; awk '{print $11}' &#124; sort &#124; uniq -c &#124; sort -r &#124; head -n 20 1184 admin 1046 test 657 oracle 557 guest 542 user 437 mysql 348 webmaster 302 postgres 298 info 279 administrator 272 web 270 [...]]]></description>
			<content:encoded><![CDATA[<p>1ヶ月前に借りたホストを、そろそろ使い始めようかと思って設定している最中に、ふとログを見てみるとsecure*が合計で60MBとかになってて、何これと思ってみて見ると全部sshdに対するBrute force attackのログでした。話には聞いていましたが自分のホストに実際に大量のログが見えると、あぁ攻撃は実在のものであったかと大変興味深いものがあります。しばらくtail -fしてログを眺めていると次から次へとバンバンログが溜まって行きました。そのユーザ名が色とりどりで面白かったので、折角と言う事でどんなユーザ名でログイントライするのかと言うのを調べてみました。以下が上位20件です。左側の数字は、そのユーザ名でログインに失敗した回数です。adminとtestは1000回超えてます。</p>
<p><span id="more-1993"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> secure<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;invalid user .* from&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> column <span style="color: #660033;">-t</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $11}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">uniq</span> <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-n</span> <span style="color: #000000;">20</span>
   <span style="color: #000000;">1184</span> admin
   <span style="color: #000000;">1046</span> <span style="color: #7a0874; font-weight: bold;">test</span>
    <span style="color: #000000;">657</span> oracle
    <span style="color: #000000;">557</span> guest
    <span style="color: #000000;">542</span> user
    <span style="color: #000000;">437</span> mysql
    <span style="color: #000000;">348</span> webmaster
    <span style="color: #000000;">302</span> postgres
    <span style="color: #000000;">298</span> info
    <span style="color: #000000;">279</span> administrator
    <span style="color: #000000;">272</span> web
    <span style="color: #000000;">270</span> student
    <span style="color: #000000;">242</span> pgsql
    <span style="color: #000000;">233</span> nagios
    <span style="color: #000000;">224</span> temp
    <span style="color: #000000;">215</span> www
    <span style="color: #000000;">215</span> ftpuser
    <span style="color: #000000;">206</span> michael
    <span style="color: #000000;">205</span> backup
    <span style="color: #000000;">186</span> tester</pre></div></div>

<p>結構マジな名前ばっかりでDNBKですね。なんらかのサービス動かす時に、うっかり同名のログインユーザを作ったりしてると危なっかしいので止めた方が良いでしょう。さて上位にはでないものの、面白いユーザ名を独断で以下列挙します。○○ザブロウ多すぎで笑えますが、日本人に多いsatouとかtanakaとかもあってこっちは笑えませんね。emanueruとかは遊んでるとしか思えません。とにかくログインユーザを作ってしかもパスワード認証を許可する場合は、リスクは全く持って0ではないというのがよくわかります。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">123</span> bingo
<span style="color: #000000;">51</span> takenowaki
<span style="color: #000000;">45</span> satou
<span style="color: #000000;">34</span> xxx
<span style="color: #000000;">27</span> snake
<span style="color: #000000;">6</span> tanaka
<span style="color: #000000;">1</span> emanueru
<span style="color: #000000;">1</span> hanzaburou
<span style="color: #000000;">1</span> matasaburou
<span style="color: #000000;">1</span> manzaburou
<span style="color: #000000;">1</span> masesaburou
<span style="color: #000000;">1</span> masusaburou
<span style="color: #000000;">1</span> masukichirou
...</pre></div></div>

<p>ついでにどのIPからのチャレンジが多いのかも調べてみました。100回以上ログが残っているIPは以下になります。上位の方のアドレスは1万回超えてて、世界のマシンリソース無駄に使うなよボケが！と思わずにはいられませんね。上位10個については国名も調べました。もちろんproxy経由の可能性も高いので何とも言えないですが、残念ながら世界中に残念な人達は分散している可能性が高いです。1箇所に偏ってたらdisってやろうかと思っていたのですが、日本国内からのアクセスもバンバンきてる状況です。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">lastb</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $3}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">uniq</span> <span style="color: #660033;">-c</span>  <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-n</span> <span style="color: #000000;">70</span>
  <span style="color: #000000;">54405</span> 218.104.55.12           <span style="color: #666666; font-style: italic;"># 中国</span>
  <span style="color: #000000;">13236</span> 210.172.204.228         <span style="color: #666666; font-style: italic;"># 日本</span>
  <span style="color: #000000;">12194</span> 213.79.85.66            <span style="color: #666666; font-style: italic;"># ロシア            </span>
  <span style="color: #000000;">10898</span> 93.93.217.40            <span style="color: #666666; font-style: italic;"># イギリス            </span>
  <span style="color: #000000;">10687</span> 98.143.145.40           <span style="color: #666666; font-style: italic;"># アメリカ           </span>
   <span style="color: #000000;">8991</span> edm.britishconsu        <span style="color: #666666; font-style: italic;"># 日本</span>
   <span style="color: #000000;">8991</span> 115.84.178.99           <span style="color: #666666; font-style: italic;"># ベトナム</span>
   <span style="color: #000000;">8317</span> mail.ckjh.hc.edu        <span style="color: #666666; font-style: italic;"># 日本</span>
   <span style="color: #000000;">5959</span> 211.154.142.153         <span style="color: #666666; font-style: italic;"># 中国</span>
   <span style="color: #000000;">5490</span> 124.124.88.20           <span style="color: #666666; font-style: italic;"># 中国</span>
   <span style="color: #000000;">3997</span> 123.129.218.195
   <span style="color: #000000;">2511</span> 212.150.123.132
   <span style="color: #000000;">2233</span> 60.223.225.181
   <span style="color: #000000;">2217</span> mail.microvillag
   <span style="color: #000000;">1991</span> 222.73.161.149
   <span style="color: #000000;">1958</span> 213.180.5.26
   <span style="color: #000000;">1729</span> 218.50.3.208
   <span style="color: #000000;">1626</span> 77.104.52.78
   <span style="color: #000000;">1560</span> 109.75.170.192
   <span style="color: #000000;">1553</span> 193.111.246.102
   <span style="color: #000000;">1415</span> <span style="color: #000000;">184</span>-<span style="color: #000000;">106</span>-<span style="color: #000000;">219</span>-<span style="color: #000000;">75</span>.s
   <span style="color: #000000;">1302</span> 212.56.206.205
   <span style="color: #000000;">1050</span> cs27025026.pp.ht
    <span style="color: #000000;">869</span> ip.82.144.203.13
    <span style="color: #000000;">853</span> 123.15.40.91
    <span style="color: #000000;">785</span> <span style="color: #000000;">173</span>-<span style="color: #000000;">203</span>-<span style="color: #000000;">104</span>-<span style="color: #000000;">36</span>.s
    <span style="color: #000000;">690</span> 220.225.127.234
    <span style="color: #000000;">584</span> lsh405.van.ca.si
    <span style="color: #000000;">580</span> 220.68.100.248
    <span style="color: #000000;">486</span> 218.19.140.4
    <span style="color: #000000;">481</span> jur243.internetd
    <span style="color: #000000;">359</span> mail.teleonto.in
    <span style="color: #000000;">348</span> server216.nt109.
    <span style="color: #000000;">310</span> <span style="color: #000000;">74</span>-<span style="color: #000000;">92</span>-<span style="color: #000000;">57</span>-<span style="color: #000000;">249</span>-new
    <span style="color: #000000;">300</span> 95.0.128.225
    <span style="color: #000000;">300</span> 69.197.183.137
    <span style="color: #000000;">300</span> <span style="color: #000000;">189</span>-<span style="color: #000000;">56</span>-<span style="color: #000000;">69</span>-<span style="color: #000000;">6</span>.ampl
    <span style="color: #000000;">282</span> 61.49.60.76
    <span style="color: #000000;">282</span> 125.160.17.242
    <span style="color: #000000;">251</span> 61.133.63.11
    <span style="color: #000000;">243</span> 61.136.145.252
    <span style="color: #000000;">228</span> fw1.102-<span style="color: #000000;">11</span>.quatr
    <span style="color: #000000;">217</span> pc-<span style="color: #000000;">93</span>-<span style="color: #000000;">53</span>-<span style="color: #000000;">241</span>-<span style="color: #000000;">201</span>
    <span style="color: #000000;">211</span> 178.18.17.75
    <span style="color: #000000;">191</span> ns.drk-duesseldo
    <span style="color: #000000;">179</span> 67.18.152.74
    <span style="color: #000000;">175</span> 222.240.138.171
    <span style="color: #000000;">167</span> 69.42.69.6
    <span style="color: #000000;">144</span> 218.38.18.159
    <span style="color: #000000;">135</span> <span style="color: #000000;">184</span>-<span style="color: #000000;">106</span>-<span style="color: #000000;">224</span>-<span style="color: #000000;">238</span>.
    <span style="color: #000000;">134</span> 190.145.38.36
    <span style="color: #000000;">129</span> 61.132.87.130
    <span style="color: #000000;">113</span> hawtuoh.com.tw
    <span style="color: #000000;">107</span> 200.44.179.90
    <span style="color: #000000;">107</span> 173.193.194.106-</pre></div></div>

<p>以上、大変興味深かったですが、自分の身は自分で守らないと駄目だなぁというのがよくわかりました。気をつけないとですね。あと余裕があればハニーポットでも仕掛けて、ログインに成功したら何をするのかも調べてみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/engineer-life/1993/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.gitignoreの使い方メモ</title>
		<link>http://taichino.com/engineer-life/1966</link>
		<comments>http://taichino.com/engineer-life/1966#comments</comments>
		<pubDate>Sun, 03 Oct 2010 07:07:18 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[技術]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1966</guid>
		<description><![CDATA[備忘録です。まず毎回.gitignoreを作成するのは面倒なので、グローバルな設定ファイルとして作成します。保存場所はどこでも良いですが、以下の場合はホームディレクトリの直下に.gitignoreを作成します。 $ git config --global core.excludesfile ~/.gitignore 共通.gitignoreの内容ですが、僕の活動範囲だと以下のようになりました。プロジェクトに固有の条件は、プロジェクト以下の.gitignoreに記述する形になります。 # general .DS_Store *.zip *.tar.gz *.exe *.bz2 .hg/ .gitignore &#160; # backup *~ *.bak &#160; # gnu global GPATH GRTAGS GSYMS GTAGS &#160; # c/c++/objc a.out *.o *.a &#160; # python *.pyc build/ dist/ *.egg-info *.mo bulkloader-log-* &#160; # xcode *.pbxuser &#160; # action script *.swf &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>備忘録です。まず毎回.gitignoreを作成するのは面倒なので、グローバルな設定ファイルとして作成します。保存場所はどこでも良いですが、以下の場合はホームディレクトリの直下に.gitignoreを作成します。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">git</span> config <span style="color: #660033;">--global</span> core.excludesfile ~<span style="color: #000000; font-weight: bold;">/</span>.gitignore</pre></div></div>

<p><span id="more-1966"></span><br />
共通.gitignoreの内容ですが、僕の活動範囲だと以下のようになりました。プロジェクトに固有の条件は、プロジェクト以下の.gitignoreに記述する形になります。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># general</span>
.DS_Store
<span style="color: #000000; font-weight: bold;">*</span>.zip
<span style="color: #000000; font-weight: bold;">*</span>.tar.gz
<span style="color: #000000; font-weight: bold;">*</span>.exe
<span style="color: #000000; font-weight: bold;">*</span>.bz2
.hg<span style="color: #000000; font-weight: bold;">/</span>
.gitignore
&nbsp;
<span style="color: #666666; font-style: italic;"># backup</span>
<span style="color: #000000; font-weight: bold;">*</span>~
<span style="color: #000000; font-weight: bold;">*</span>.bak
&nbsp;
<span style="color: #666666; font-style: italic;"># gnu global</span>
GPATH
GRTAGS
GSYMS
GTAGS
&nbsp;
<span style="color: #666666; font-style: italic;"># c/c++/objc</span>
a.out
<span style="color: #000000; font-weight: bold;">*</span>.o
<span style="color: #000000; font-weight: bold;">*</span>.a
&nbsp;
<span style="color: #666666; font-style: italic;"># python</span>
<span style="color: #000000; font-weight: bold;">*</span>.pyc
build<span style="color: #000000; font-weight: bold;">/</span>
dist<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #000000; font-weight: bold;">*</span>.egg-info
<span style="color: #000000; font-weight: bold;">*</span>.mo
bulkloader-log-<span style="color: #000000; font-weight: bold;">*</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># xcode</span>
<span style="color: #000000; font-weight: bold;">*</span>.pbxuser
&nbsp;
<span style="color: #666666; font-style: italic;"># action script</span>
<span style="color: #000000; font-weight: bold;">*</span>.swf
&nbsp;
<span style="color: #666666; font-style: italic;"># java</span>
<span style="color: #000000; font-weight: bold;">*</span>.class
&nbsp;
<span style="color: #666666; font-style: italic;"># yacc/lex</span>
lex.yy.c
<span style="color: #000000; font-weight: bold;">*</span>.tab.c
<span style="color: #000000; font-weight: bold;">*</span>.tab.h</pre></div></div>

<p>次に記述方法ですが、基本はワイルドカードで特定の拡張子を持つファイルを指定します。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># pngファイルは管理しない</span>
<span style="color: #000000; font-weight: bold;">*</span>.png
&nbsp;
<span style="color: #666666; font-style: italic;"># 但しtest.pngだけは例外</span>
<span style="color: #000000; font-weight: bold;">!</span>test.png
&nbsp;
<span style="color: #666666; font-style: italic;"># buildディレクトリ以下は管理しない</span>
build<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># tmpディレクトリ以下は管理しないが、tmpディレクトリ自体は管理する</span>
tmp<span style="color: #000000; font-weight: bold;">/**/*</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># 拡張子まとめて指定</span>
<span style="color: #000000; font-weight: bold;">*</span>.<span style="color: #7a0874; font-weight: bold;">&#91;</span>o<span style="color: #000000; font-weight: bold;">|</span>a<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>大抵はこれでいいんですけど、気になるのは拡張子を持たない実行ファイルです。プロジェクトごとに名前も違うので毎度.gitignoreに追加するのが面倒ですね。そこで現在のディレクトリ以下に配置された拡張子を持たないバイナリファイルを、まとめて.gitignoreとして出力するpythonスクリプトを書きました。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
  <span style="color: #808080; font-style: italic;"># file 列挙</span>
  target_dir = <span style="color: #483d8b;">'.'</span>
  binary_files = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#40;</span>root, dirs, files<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">walk</span><span style="color: black;">&#40;</span>target_dir<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">for</span> filename <span style="color: #ff7700;font-weight:bold;">in</span> files:
      parts = filename.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.'</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>parts<span style="color: black;">&#41;</span> == <span style="color: #ff4500;">1</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>filename, <span style="color: #483d8b;">'rb'</span><span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
        binary_files.<span style="color: black;">append</span><span style="color: black;">&#40;</span>filename<span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;"># .gitignore出力</span>
  output = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.gitignore'</span>, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> bf <span style="color: #ff7700;font-weight:bold;">in</span> binary_files:
    output.<span style="color: black;">write</span><span style="color: black;">&#40;</span>bf + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;added &quot;</span> + bf + <span style="color: #483d8b;">&quot; to .gitignore&quot;</span>
  output.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>: main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>これで一通り.gitignoreが使えるようになりました。昨日OSが起動しなくなって、リポジトリの重要性を再認識しました。やや適当にあつかってたんですけど、これからはもう少しきちんと管理しようと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/engineer-life/1966/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RPMの使い方メモ</title>
		<link>http://taichino.com/engineer-life/1932</link>
		<comments>http://taichino.com/engineer-life/1932#comments</comments>
		<pubDate>Sat, 25 Sep 2010 05:06:53 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[技術]]></category>
		<category><![CDATA[rpm]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1932</guid>
		<description><![CDATA[普段はyumを使うので直接はあまり意識しないRPMなんですが、複数のHostを使用するようになって、ビルドが面倒なプログラムを自分でRPMにしておきたいという欲求が出てきましたので、RPM周辺についてメモしておきます。ド素人なので色々間違っているかもしれません。 まずrpmコマンドの基本的な操作は以下のような感じでしょうか。特に自分でrpmファイルを作っている最中はrpm -qlpでパッケージの中身の確認を頻繁に使いました。 $ rpm -ihv hoge.rpm # install $ rpm -uhv hoge_new.rpm # update $ rpm -e hoge # uninstall $ rpm -qlp some.rpm # show file list $ rpm -qf /path/to/file # ファイルが所属するパッケージ取得 $ rpm -qa # インストールされているパッケージ一覧 またSRPMからRPMファイルを作るには、rpmbuildを用います。 $ rpmbuild --rebuild hoge.src.rpm すると~/.rpmmacroファイル等で%_topdirに指定されたディレクトリ(以下RPM作業ディレクトリ)にRPMファイルが作成されます。デフォルトだと/usr/src/redhat以下が指定されていますが、パーミッションの関係で別の場所に変えた方が使いやすいと思います。この変更が結構めんどうなので、ここからmkrpmdirスクリプトをこちらから拝借するのが良いかと思います。このコマンドを使用して例えば~/rpmをRPM作業ディレクトリにする場合は以下のようにします。都合のいい場所を設定してください。以下では~/rpmを作業ディレクトリに設定したものとしています。 $ mkrpmdir ~/. ちなみにこの作業ディレクトリの構造は以下のようになっています。自分で作成するのは少し面倒ですね。 $ tree ~/rpm /home/taichino/rpm &#124;-- [...]]]></description>
			<content:encoded><![CDATA[<p>普段はyumを使うので直接はあまり意識しないRPMなんですが、複数のHostを使用するようになって、ビルドが面倒なプログラムを自分でRPMにしておきたいという欲求が出てきましたので、RPM周辺についてメモしておきます。ド素人なので色々間違っているかもしれません。<br />
<span id="more-1932"></span></p>
<p>まずrpmコマンドの基本的な操作は以下のような感じでしょうか。特に自分でrpmファイルを作っている最中はrpm -qlpでパッケージの中身の確認を頻繁に使いました。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ rpm <span style="color: #660033;">-ihv</span> hoge.rpm      <span style="color: #666666; font-style: italic;"># install</span>
$ rpm <span style="color: #660033;">-uhv</span> hoge_new.rpm  <span style="color: #666666; font-style: italic;"># update</span>
$ rpm <span style="color: #660033;">-e</span> hoge            <span style="color: #666666; font-style: italic;"># uninstall</span>
$ rpm <span style="color: #660033;">-qlp</span> some.rpm      <span style="color: #666666; font-style: italic;"># show file list</span>
$ rpm <span style="color: #660033;">-qf</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">file</span>  <span style="color: #666666; font-style: italic;"># ファイルが所属するパッケージ取得</span>
$ rpm <span style="color: #660033;">-qa</span>                <span style="color: #666666; font-style: italic;"># インストールされているパッケージ一覧</span></pre></div></div>

<p>またSRPMからRPMファイルを作るには、rpmbuildを用います。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ rpmbuild <span style="color: #660033;">--rebuild</span> hoge.src.rpm</pre></div></div>

<p>すると~/.rpmmacroファイル等で%_topdirに指定されたディレクトリ(以下RPM作業ディレクトリ)にRPMファイルが作成されます。デフォルトだと/usr/src/redhat以下が指定されていますが、パーミッションの関係で別の場所に変えた方が使いやすいと思います。この変更が結構めんどうなので、<a href="http://wikiwiki.jp/masami/?TIPS%2FLinux%2Fsrc.rpm%A4%CE%C5%B8%B3%AB">ここ</a>からmkrpmdirスクリプトをこちらから拝借するのが良いかと思います。このコマンドを使用して例えば~/rpmをRPM作業ディレクトリにする場合は以下のようにします。都合のいい場所を設定してください。以下では~/rpmを作業ディレクトリに設定したものとしています。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ mkrpmdir ~<span style="color: #000000; font-weight: bold;">/</span>.</pre></div></div>

<p>ちなみにこの作業ディレクトリの構造は以下のようになっています。自分で作成するのは少し面倒ですね。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tree</span> ~<span style="color: #000000; font-weight: bold;">/</span>rpm
<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>taichino<span style="color: #000000; font-weight: bold;">/</span>rpm
<span style="color: #000000; font-weight: bold;">|</span>-- BUILD
<span style="color: #000000; font-weight: bold;">|</span>-- RPMS
<span style="color: #000000; font-weight: bold;">|</span>   <span style="color: #000000; font-weight: bold;">|</span>-- i386
<span style="color: #000000; font-weight: bold;">|</span>   <span style="color: #000000; font-weight: bold;">|</span>-- i586
<span style="color: #000000; font-weight: bold;">|</span>   <span style="color: #000000; font-weight: bold;">|</span>-- i686
<span style="color: #000000; font-weight: bold;">|</span>   <span style="color: #000000; font-weight: bold;">`</span>-- noarch
<span style="color: #000000; font-weight: bold;">|</span>-- SOURCES
<span style="color: #000000; font-weight: bold;">|</span>-- SPECS
<span style="color: #000000; font-weight: bold;">`</span>-- SRPMS</pre></div></div>

<p>次にRPM,SRPMファイルの中身について確認してみます。探した中では<a href="ftp://mirror.switch.ch/pool/3/mirror/centos/5.5/os/SRPMS/">bcコマンドのパッケージ</a>が小さくて綺麗で良かったです。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #c20cb9; font-weight: bold;">ftp</span>:<span style="color: #000000; font-weight: bold;">//</span>mirror.switch.ch<span style="color: #000000; font-weight: bold;">/</span>pool<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">/</span>mirror<span style="color: #000000; font-weight: bold;">/</span>centos<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">5.5</span><span style="color: #000000; font-weight: bold;">/</span>os<span style="color: #000000; font-weight: bold;">/</span>SRPMS<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span>-<span style="color: #000000;">21</span>.src.rpm
$ rpm <span style="color: #660033;">-ihv</span> bc-<span style="color: #000000;">1.06</span>-<span style="color: #000000;">21</span>.src.rpm                    <span style="color: #666666; font-style: italic;"># SRPMをRPM作業ディレクトリへ配置</span>
$ rpm <span style="color: #660033;">-qlp</span> ~<span style="color: #000000; font-weight: bold;">/</span>rpm<span style="color: #000000; font-weight: bold;">/</span>SRPMS<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span>-<span style="color: #000000;">21</span>.src.rpm        <span style="color: #666666; font-style: italic;"># 配置されたSRPMファイルの中身の確認</span>
bc-<span style="color: #000000;">1.06</span>-info_exp_bessel.patch
bc-<span style="color: #000000;">1.06</span>-readline42.patch
bc-<span style="color: #000000;">1.06</span>-s390.patch
bc-<span style="color: #000000;">1.06</span>.tar.bz2
bc.spec
$ rpmbuild <span style="color: #660033;">-ba</span> ~<span style="color: #000000; font-weight: bold;">/</span>rpm<span style="color: #000000; font-weight: bold;">/</span>SPECS<span style="color: #000000; font-weight: bold;">/</span>bc.spec
$ rpm <span style="color: #660033;">-qlp</span> ~<span style="color: #000000; font-weight: bold;">/</span>rpm<span style="color: #000000; font-weight: bold;">/</span>RPMS<span style="color: #000000; font-weight: bold;">/</span>i386<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span>-<span style="color: #000000;">21</span>.i386.rpm   <span style="color: #666666; font-style: italic;"># RPMファイルの中身を確認</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">bc</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">dc</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span><span style="color: #000000; font-weight: bold;">/</span>AUTHORS
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span><span style="color: #000000; font-weight: bold;">/</span>COPYING
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span><span style="color: #000000; font-weight: bold;">/</span>COPYING.LIB
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span><span style="color: #000000; font-weight: bold;">/</span>FAQ
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span><span style="color: #000000; font-weight: bold;">/</span>NEWS
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>bc-<span style="color: #000000;">1.06</span><span style="color: #000000; font-weight: bold;">/</span>README
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>info<span style="color: #000000; font-weight: bold;">/</span>bc.info.gz
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>info<span style="color: #000000; font-weight: bold;">/</span>dc.info.gz
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>man<span style="color: #000000; font-weight: bold;">/</span>man1<span style="color: #000000; font-weight: bold;">/</span>bc.1.gz
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>man<span style="color: #000000; font-weight: bold;">/</span>man1<span style="color: #000000; font-weight: bold;">/</span>dc.1.gz</pre></div></div>

<p>RPMファイルには実際にインストールされる、実行バイナリやmanコマンド用のヘルプファイルなどが含まれています。またSRPMファイルにはRPMファイルを作成するためのソース(大抵はtar玉)とパッチとSPECファイルが含まれています。このSPECファイルにSRPMからRPMを作る際の手順が書かれているというのが大まかな構成となります。</p>
<p>続いて、いよいよ自分で書いたプログラムのRPMを作ってみます。先日作った<a 　href="http://github.com/taichino/minishoot">ncursesのサンプル</a>のRPMファイルを作ってみる事にしました。<br />
RPMファイルを作るというのは、ほとんどSPECファイルを書く作業と考えて大体差し支えなさそうです。(RPMを作る際に必要に応じてパッチを当てる習慣があるようですが、今のところ理由を理解していません。) 実際に書いてみたSPECファイルが以下になります。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">%</span>define name    minishoot
<span style="color: #000000; font-weight: bold;">%</span>define version <span style="color: #000000;">1.0</span>
<span style="color: #000000; font-weight: bold;">%</span>define release <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">%</span>define buildroot <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>_tmppath<span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>name<span style="color: #7a0874; font-weight: bold;">&#125;</span>-<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>version<span style="color: #7a0874; font-weight: bold;">&#125;</span>-root
<span style="color: #000000; font-weight: bold;">%</span>define _prefix <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span>
&nbsp;
Summary: this is a sample game <span style="color: #000000; font-weight: bold;">for</span> practice ncurses
Name: <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>name<span style="color: #7a0874; font-weight: bold;">&#125;</span>
Version: <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>version<span style="color: #7a0874; font-weight: bold;">&#125;</span>
Release: <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>release<span style="color: #7a0874; font-weight: bold;">&#125;</span>
URL: http:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>taichino<span style="color: #000000; font-weight: bold;">/</span>minishoot
Source: <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>name<span style="color: #7a0874; font-weight: bold;">&#125;</span>-<span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>version<span style="color: #7a0874; font-weight: bold;">&#125;</span>.tar.gz
License: MIT
Group: game
BuildRoot: <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>buildroot<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span>description
This is sample game <span style="color: #000000; font-weight: bold;">for</span> practice ncurses
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span>prep
<span style="color: #000000; font-weight: bold;">%</span>setup <span style="color: #660033;">-q</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span>build
.<span style="color: #000000; font-weight: bold;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;">make</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span><span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$RPM_BUILD_ROOT</span>
<span style="color: #000000; font-weight: bold;">%</span>makeinstall
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span>clean
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$RPM_BUILD_ROOT</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span>files
<span style="color: #000000; font-weight: bold;">%</span>defattr<span style="color: #7a0874; font-weight: bold;">&#40;</span>-,root,root<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>games<span style="color: #000000; font-weight: bold;">/</span>minishoot</pre></div></div>

<p>一番上に環境変数の定義、続いてプログラムの基本情報が書かれています。rpmbuildコマンドは%prep, %build, %install %cleanに書かれているコマンドを順に実行していきます。そして%installで実際にインストールされるファイル群が格納されたRPMファイルが作成されます。configureやmakeのオプション指定が複雑な場合は、%buildを書いておけば次からはrpmbuildと打つだけでいいので嬉しいですね。</p>
<p>あまり難しい話はないのですが、僕がハマったのは%makeinstallで作られるファイルのパスが予期しない場所になるというものでした。調べてみるとこのマクロはmake installを呼ぶのですが、その際にrpmコマンド内で使用されている変数が、ごっそりとmakeに渡されます。その結果rpmコマンド群の設定によっては予期しないパスが指定される事になります。_prefixを上書きしているのはそのためで、Makefileで想定するパスとあわせています。何かパスがおかしいなと感じたときはrpmbuild &#8211;showrcで変数の一覧を確認するといいかもしれません。</p>
<p>さてSPECも書いたので実際にRPMファイルを作ります。本来はRPM作業ディレクトリへSPECファイル、ソースファイルが入ったtar玉を配置して、rpmbuildコマンドを打つようですが、tar玉にspecファイルを含めておけば、rpmbuildにtar玉を指定してrpmファイルを作る事ができます。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> Makefile.am                     <span style="color: #666666; font-style: italic;"># Autotoolsを使う場合はMakefile.amにspecファイルをEXTRA_DISTに指定しておく。</span>
SUBDIRS = src
<span style="color: #007800;">EXTRA_DIST</span>=minishoot.spec
$ <span style="color: #c20cb9; font-weight: bold;">make</span> dist  <span style="color: #666666; font-style: italic;"># tar玉ができる</span>
$ rpmbuild <span style="color: #660033;">-ta</span> minishoot-<span style="color: #000000;">1.0</span>.tar.gz   <span style="color: #666666; font-style: italic;"># RPM作成</span>
$ <span style="color: #c20cb9; font-weight: bold;">ls</span> ~<span style="color: #000000; font-weight: bold;">/</span>rpm<span style="color: #000000; font-weight: bold;">/</span>RPMS<span style="color: #000000; font-weight: bold;">/</span>i386</pre></div></div>

<p>無事にRPMファイルを作る事ができました。実際はrpmは既存のビルドコマンドを叩くだけなので、複雑な事をするにはmakeなどのビルドの仕組みをきちんと押さえる必要がありますね。</p>
<p>あとSRPMファイルから中身を取り出すにはrpm2cpioおよびcpioコマンドを使えばよいようです。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ rpm2cpio hoge.src.rpm <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cpio</span> <span style="color: #660033;">-i</span>      <span style="color: #666666; font-style: italic;"># src.rpmを展開してまき散らす</span></pre></div></div>

<p>僕は普段あまり見かけないのですcpioの概要は以下のような感じでしょうか。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> archive <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cpio</span> <span style="color: #660033;">-i</span>                <span style="color: #666666; font-style: italic;"># 展開</span>
$ some filenames <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cpio</span> <span style="color: #660033;">-oc</span> <span style="color: #000000; font-weight: bold;">&gt;</span> archive  <span style="color: #666666; font-style: italic;"># 圧縮</span></pre></div></div>

<p>これで頑張ればRPMファイル作れる感じになったので、ビルドが大変なパッケージはどんどんRPM化していこうと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/engineer-life/1932/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

