■
まじ忘れるので、めも
https://golang.org/pkg/go/build/
that lists the conditions under which a file should be included in the package. Constraints may appear in any kind of source file (not just Go), but they must appear near the top of the file, preceded only by blank lines and other line comments. These rules mean that in Go files a build constraint must appear before the package clause.
To distinguish build constraints from package documentation, a series of build constraints must be followed by a blank line.
罠だろこれ
■
まあ、なんですか、ようやくひと段落。
んでもって、もう一息。
MacVimをBuildした時のメモ
香り屋さんのMacVimのPythonが2.6ベースだったので、2.7にしたいなぁと、Buildし直したですよ。そしたら、まあ、色々大変だったので、忘れないうちにメモを。
まず、gitから持ってきて、さあコンパイルと makeしたら、ja_JP.UTF-8.moがねーよとエラーがでた。
../po/ja_JP.UTF-8.mo: No such file or directory
こんな感じ。これは、msgfmt、msgmergeあたりが無いのが原因らしい。
じゃ、入れてやるか、と。
brew install gettext
brew link gettext
これで入る。通常なら、installだけでいいけど、gettextは、linkもしないと駄目。先に進んで、makeして、ようやく、できたと喜んで起動したら、今度は migemoが使用できないよとエラー
ぐぬぬ。無視しても良いかなと思ったけど、なんかしゃくなので、cmigemoをいれる。
brew search cmigemo
export CPPFLAGS=-I/usr/local/include/
configureが/usr/local/includeを読んでくれないので、CPPFLAGSを設定して、configue
./configure --with-features=huge --enable-multibyte --enable-rubyinterp --enable-pythoninterp --enable-perlinterp --enable-cscope --with-tlib=ncurses --with-macarchs=x86_64
make
これで、おk
まとめると、
git clone git://github.com/splhack/macvim.git cd macvim/src brew install gettext brew link gettext brew search cmigemo export CPPFLAGS=-I/usr/local/include/ ./configure --with-features=huge --enable-multibyte --enable-rubyinterp --enable-pythoninterp --enable-perlinterp --enable-cscope --with-tlib=ncurses --with-macarchs=x86_64 make
まあ、よかったよ。;-p
CentOS 5.7 x86_64 版でchroot
あるサーバをファイルサーバとして使いたいという要望があって、いろいろ考えたんですが、chrootで一部解放することにしました。さくっと設定して終わりかと思ったのですが、なかなかどうして、一部引っかかったところがありましたので、備忘として記述しておきます。
環境がCentOS 5.7 x86_64でありまして、標準のopensshだと、chrootできないとのことなので、rpmbuildしてインストールしてあげました。まあ、インストール方法は、いろいろなところで紹介されていますので、詳しくは省きます。で、まずはじめの引っかかりポイントですが、2012年2月時点の最新版のopenssh-5.9p1-1だと、このbuildに失敗します。
cp: cannot stat `WARNING*': そのようなファイルやディレクトリはありません
エラー: /var/tmp/rpm-tmp.15281 の不正な終了ステータス (%doc)
ファイルの処理中: openssh-clients-5.9p1-1
Provides: config(openssh-clients) = 5.9p1-1
:
Obsoletes: ssh-server
ファイルの処理中: openssh-debuginfo-5.9p1-1
伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/openssh-5.9p1-buildroot
なんてこったい。えっと、WARNINGが無くなっとりますがな。
contrib/redhat/openssh.specの
%doc CREDITS ChangeLog INSTALL LICENCE OVERVIEW README* PROTOCOL* TODO WARNING*
を
%doc CREDITS ChangeLog INSTALL LICENCE OVERVIEW README* PROTOCOL* TODO
に変更してあげます。
再びbuild。まあ、あとは、CPUさん頑張ってで、rpmが出来上がるまで待ちます。出来上がって、
rpm -Uvh /usr/src/redhat/RPMS/x86_64/openssh-5.9p1-1.x86_64.rpm
rpm -Uvh /usr/src/redhat/RPMS/x86_64/openssh-clients-5.9p1-1.x86_64.rpm
rpm -Uvh /usr/src/redhat/RPMS/x86_64/openssh-server-5.9p1-1.x86_64.rpm
みたいな感じで、インストールすれば、OK.
で、お決まりの chroot-adduser スクリプトを貼付けて、userの作成っと。
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `./lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
cp: cannot create regular file `lib/': ディレクトリです
またエラーがでてますよ><
あー、libじゃなく、lib64だよね。ということで、
cp /lib64/libnss_compat.so.2 lib64/
cp /lib64/libnsl.so.1 lib64/
cp /lib64/libnss_files.so.2 lib64/
cp /lib64/ld-linux.so.2 ./lib64/
cp /lib64/libc.so.6 lib64/
cp /lib64/libm.so.6 lib64/
cp /lib64/libpthread.so.0 lib64/
cp /lib64/librt.so.1 lib64/
cp /lib64/libthread_db.so.1 lib64/
と修正。再度実行...
cp: cannot stat `/lib64/ld-linux.so.2': そのようなファイルやディレクトリはありません
なんてこったい。なんでないの?
cp /lib64/ld-linux.so.2 ./lib64/
じゃなくって、
ですがな。ということで、最終的には、
cp /lib64/libnss_compat.so.2 lib64/
cp /lib64/libnsl.so.1 lib64/
cp /lib64/libnss_files.so.2 lib64/
cp /lib64/ld-linux-x86-64.so.2 lib64/
cp /lib64/libc.so.6 lib64/
cp /lib64/libm.so.6 lib64/
cp /lib64/libpthread.so.0 lib64/
cp /lib64/librt.so.1 lib64/
cp /lib64/libthread_db.so.1 lib64/
後は、鍵なりを設定して、使用してもらえばokですね。;)
Eclipse で GAE 1.6 + Python 2.7 + Django 1.2
環境を作る機会があったので、メモとして残しておきます。main.pyに気をつければ、特に難しいことはないです。
インストール
当たり前の話ですが、EclipseおよびPyDev、Python 2.7、GAE SDK 1.6を入れておく必要があります。この際の注意点は、Djangoのインストールが必要ないということです。*1
プロジェクト
PyDev Google App Engine Project で、プロジェクトを作ってやります。空のプロジェクトでOKです。特に難しいところはないですが、${GOOGLE_APP_ENGINE}のパスは、覚えておくほうがいいです。
GAE
GAEで必要なファイルをカレントに作ります。
- app.yaml
application: gae_application_id version: 1 runtime: python27 api_version: 1 threadsafe: true libraries: - name: django version: "1.2" handlers: - url: /.* script: main.app
- main.py
import os import sys path = 'src' if path not in sys.path: sys.path.append(path) os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoproj.settings' import django.core.handlers.wsgi app = django.core.handlers.wsgi.WSGIHandler()
app.yamlは、Python2.7用になっています。main.pyでpathの設定していますが、これは、Eclipseのsrcディレクトリ内にDjangoをおくための処置です。srcディレクトリを使わないなら必要ありません。
Django
GAEのdjango-admin.pyを使います。Djangoのパス*2を通しておく必要があります。
Eclipseのsrcディレクトリ上で、
$ django-admin.py startproject {djangoproj(任意)}
$ cd djangoproj
$ django-admin.py startapp {djangoapp(任意)}
として、Djangoの環境を整えてやります。これで、好きなようにDjangoを使えるはずです。
一応、以降、確認用にコードを書いておきます。
- src/djangoproj/djangoapp/views.py
from django.http import HttpResponse def index(request): return HttpResponse("Hello World.")
- src/djangoproj/settings.py
: ROOT_URLCONF = 'djangoproj.urls' : INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'djangoproj.djangoapp', )
- src/djangoproj/urls.py
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', 'djangoproj.djangoapp.views.index'), )
最終的なディレクトリはこんな感じ。
gae_application_id\ ├ src\ │ └ djangoproj\ │ ├ djangoapp\ │ │ ├ __init__.py │ │ ├ models.py │ │ └ views.py │ ├ __init__.py │ ├ manage.py │ ├ settings.py │ └ urls.py ├ app.yaml ├ favicon.ico └ main.py
Eclipseの実行環境を整えてやれば、たぶんこれで動くはず。:P
undefined reference to `sync_file_range'
CentOS 5.6 でのお話です。たぶん、CentOS 5系であれば、同じ結果になるのではないかな思います。
node.jsのv0.5.1を本家からダウンロード(http://nodejs.org/dist/v0.5.1/node-v0.5.1.tar.gz)して、makeをすると、
:
/usr/local/src/node-v0.5.1/build/default/deps/uv/src/eio/eio.c:923: undefined reference to `sync_file_range'
collect2: ld はステータス 1 で終了しました
Waf: Leaving directory `/usr/local/src/node-v0.5.1/build'
Build failed: -> task failed (err #1):
{task: cxx_link node_main_5.o,node_5.o,node_buffer_5.o,node_javascript_5.o,
node_extensions_5.o,node_http_parser_5.o,node_constants_5.o,node_events_5.o,
node_file_5.o,node_script_5.o,node_os_5.o,node_dtrace_5.o,node_string_5.o,
timer_wrap_5.o,tcp_wrap_5.o,cares_wrap_5.o,node_cares_5.o,node_net_5.o,
node_signal_watcher_5.o,node_stat_watcher_5.o,node_io_watcher_5.o,node_stdio_5.o,
node_child_process_5.o,node_timer_5.o,platform_linux_5.o,node_crypto_5.o,
http_parser_3.o -> node}make: *** [program] エラー 1
あれ?と、思って少し調べてみると、undefined reference to `sync_file_range'は、RHEL5のBugのバグのようです。
518581 – [RHEL5] glibc misses sync_file_range syscall interface
この問題、glibc を2.6にするという対処方もあるようですが、明らかにめんどくさいので根本的な原因をつかんで、対象してみました。
結論としては、sync_file_rangeの使用判断をしているファイル、
deps/uv/src/eio/config_linux.h
を書き換えてしまえばOKです。マクロ HAVE_SYNC_FILE_RANGE でsync_file_rangeの使用可能判断をしていますので、これをちょこっと変えてあげればコンパイルできます。
変更方法は、
#define HAVE_SYNC_FILE_RANGE LINUX_VERSION_AT_LEAST(2, 6, 17)
となっている部分をコメントアウトしてしまってもいいのですが、汎用的に変更する方法がFix to check glibc version for HAVE_SYNC_FILE_RANGE by shigeki · Pull Request #1338 · nodejs/node-v0.x-archive · GitHubに載っています。「glibcを使用している場合は、version2.6以降でないと、sync_file_rangeは、使用しませんよ。」という変更を加えるだけです。簡単ですね。:)
なお、v0.4.xだと、./configureの際、sync_file_rangeが使用できない事を確認します*2が、v.0.5.x系の場合は、headerファイルのマクロ内でkernelバージョンだけで判断しているということが影響しているようです。
sudoを使用時の環境変数PATHの設定
node.jsをインストール・設定している時に気がついたのですが、いつのころからか、sudoを使用する時の環境変数PATHが引き継がれないようです。
調べてみると、いくつかの対応方法があるようです。
- aliasで対応する方法
alias sudo="sudo env PATH=$PATH"
- /etc/sudoersを変更する方法(下記を/etc/sudoersに追加)
Defaults env_keep += "PATH"
/etc/sudoersを変更する方が根本な解決方法ですが、sudo使用者すべてに影響があります。
まあ、sudoを使用出来る権限で、PATHを制限する必要はあまりないような気もしますけどね :p