カテゴリー: NDI

Home / カテゴリー: NDI

ランレベルを理解した

2014-05-08 | Linux, サーバ構築 | コメントはまだありません

ぴこぴこプログラムを打つまではなんとかなるけど、箱だの線だのは全く理解ができない、自分の分野にだけロックインしてるダメグラマーをやっております。
なので基礎的なことも知らないまま生きてるわけです。
ランレベルとは結局なんなのか。
某日、チャットルームの会話を抜粋。登場人物は、HP-UXが得意なサーバやさん、Oracleが主戦場のDBやさん、そしてあたし。

DB屋: 自動起動の為に# chkconfig –level 35 portmap on
を打てば良いっぽいんだが、35の意味を調べないとなのだ
鯖屋: ランレベルのことだな。ランレベル3と5で起動してねってことさ
DB屋: ランレベルなのか。しかし35の間にスペースはいらんの?
鯖屋: いらん。ランレベル35ってないからね。6でおわり
DB屋: あれか。0:off 1:off とかズラズラ出て来るところの3と5をonにしろってやつか!
鯖屋: んだ。いまの状態をみたいなら、
chkconfig –list | grep portmap
とかやればでてくる
DB屋: 見てみる。0~6まで全部OFFだったわ。
鯖屋: んじゃぁ、3と5をonかな
鯖屋: 2で上げてもいいけど、意味ないな。
鯖屋:

0がしゃっとだうん
1がしんぐる
2がネットワークなしのマルチ
3がマルチ
4が未使用。HP-UXは使うけどな。
5がGUI
6がリブート

DB屋: これコピーするw
鯖屋: http://www.atmarkit.co.jp/flinux/rensai/linuxtips/156whatrunlv.html
鯖屋: 綺麗に書かれてまっせ・・・
あたし: それ見ていつも不思議に思うわ うっかり6とか指定すると、永久に再起動し続けるゴミができるんだろ?
鯖屋: うん
あたし: 何に使うんだ。。。
鯖屋: システム起動したとたんに init 0で停止とかな。
あたし: あ、とちゅうで止める方法あるにはあるのか
鯖屋: 止められないなw
鯖屋: ソフトウェアが使うんだよ。 不正な状態で固まりかけたら、最後の断末魔で6発動www おまえら死ねやあああああwwww みたいな
あたし: もしかしてなにかね、たとえば
あたし: shutodown -h なうwww とかやってる中身は
あたし: ランレベルを変更している、みたいな話なの
鯖屋: そうですな。
あたし: ははー ラップされてたのかあれは
鯖屋: うらでは、init ってコマンドが動いてる。
あたし: すごく納得した。。。
鯖屋: init ランレベル番号指定で、ランレベル変わるのだ。
あたし: さっそくやってみる
あたし: wwwwwwwwwwwwwwwwww
あたし: なにもおきねえじゃんwww
あたし: とおもたら
あたし: 確かに再起動したwwwwwwwwww
鯖屋: 現在のランレベルみたいなら who -rかな
あたし: いままでshutdown -h なうwとかやってたのアホじゃんか
あたし: init 0でサーバ落とせたんだな
鯖屋: まぁ^^;
あたし: でもそうしないってことは行儀悪いんだな
鯖屋: メッセでないんだよねー なうw のほうがいいよ。
あたし: えーと、とあるサーバに二人(AさんBさん)つないでます
あたし: Aさんがinit0やっておとしたら、Bさんからは急に死んだように見えるが、
あたし: なうwってやると、おとすよーしぬよーってメッセージが両者に届くという話?

# shutdown -h now
Broadcast message from root@localhost
        (/dev/pts/0) at 11:37 ...
The system is going down for halt NOW!

鯖屋: まぁw そういう感じw なうwは、waitつけられるのだ
鯖屋: 60secでしんじゃいますーとか
あたし: おおーなるほど、あれ全員に届いてるメッセージなんだ
鯖屋: システムおちますよは、全員に届くけど死ぬ寸前の断末魔なのだ。
鯖屋: なので、init系だといきなり死ぬ寸前にメッセでておいおいってなる
鯖屋: なうw だと、あとxx秒でおちるよー とかメッセおくれるのね。ログインユーザ全員に。 そういった意味では親切コマンドではある

ストンとハラに落ちた。

Charles Antony Richard Hoare

2012-11-23 | NDI | コメントはまだありません

ソフトウェアを設計するには2通りの方法がある。1つはとてもシンプルに設計して、明らかに欠陥がないようにすること。もう1つは、とても複雑に設計して明らかな欠陥がないようにすることだ。前者の方がはるかに困難である。

Scaffoldで先人の知恵を学ぶ

2012-09-26 | NDI | コメントはまだありません

SQLAlchemy(+MongoDB)+Jinja2(Genshi)
この組み合わせはあるだろう。Github眺めたら実際あった。
あたしが当面やりたいことがRapidGizaで解決してる。
とおもいきや既にgithub死んでました。いい名前なのに。
PythonのWAF周辺のライブラリ名は結構好きです。ピラミッド、アルケミー、フラスコ、クフ、エリクサーなんてのもあったな。こういう妖しい単語大好き。
はい。

App/app/scripts/initializedb.py:

- from .models.models import (
+ from ..models.models import (

modelをmodelsディレクトリに移動してまとめたので書き換え。
そのままルートにばらまいてる人はそのままでおk
あんま小分けにしても使いづらいのかなあ。みんなディレクトリ切って小分けにしてしまっちゃいました。

models/
lib/
scripts/
tests/
web/
  templates/
  views/
  static/
    css/
    js/
    img/
__init__.py
const.py

こんな按配です。
ディレクトリの配置やconst.pyなどについては、shazow / pyramid_scaffolds_decoupledさんやグローバル定数@rm -rf /さんを参考にしました。

コレにともなってapp/__init__.pyの中がちょっと書き換わりますね。

config.add_static_view('static', 'web/static', cache_max_age=3600)

config.scan('.web.views') # views
config.scan('.lib')

Pylonsでいうところのhelperをどっかに置きたい。libを切ればいいか。
PyConJP2012で、Pyramidにはhelperない云々、WebHelperとかそういうの使ってくださいという話を聞き、にわかに情緒不安定になり、言いつつも実はPylonsっぽいhelperの使い方もします、みたいな、なんだか狐につままれたような話を聞いてきたばっかりなのであります。
h.hoge()とかしたくない?したいよねえ。

あんまり意識していなかったんですが、Pyramidっていうのはメタフレームワークなのかな。土台あるんで好きに(俺俺フレームワークを)構築してノウハウ貯めこんだりしちゃってくださいよというような。
なんかFlask意識したっぽい「1ファイルで動く代物書けちゃう!」みたいなデモはする必要ないよね。1ファイルで済むようなもの作りたければ普通Flaskとか使う。
#学習コスト云々といった理由は除く

ともあれ、構成とか落ち着いたらScaffoldの作成にも手を出してみたい。
この機能はステキだ。

自宅サーバでルータがAtermの場合+Nginx

2012-04-26 | Nginx, サーバ構築 | コメントはまだありません

DDNSなんかでドメイン振っててもFQDNでアクセスできませんよね。自宅からだと。
これ知ってたら買わなかったわ。ほんとうに不便。

外から見たい場合はDDNSでドメイン引き回してあるので見られるんですが、たとえば自宅Wifiから見ようっていうと、ドメイン名打ってもだめなのね。iPhoneとかそういうのが即アウト。
自宅鯖の中には開発中や絶賛放置中の有象無象やp2やphpmyadminなんかが転がってるんですが、これらはLAN内から見に行く場合、192.168.0.15:8000ならアプリA、192.168.0.15:8001ならアプリB、みたいにしてやりくりしてました。Apacheでのやりかたはいろんなトコに書いてあると思う。

で、自宅鯖のApacheを消して、ふとした拍子にNginxに変えてみました。
さいきんおねーさんは何やるにしてもNginxです。すごいお気に入り。
設定楽だし軽いしね。
php?
>php-cgi -b 127.0.0.1:9000
解決するじゃないかきみーもんだいないよー
Pylonsさんとかのおかげで、この方式で立てておくというのがしっくりくるようになってた。成長だわー

いままでは、apacheのports.confにこんな書き方してました。
(IPアドレスやポート番号とかはサンプルなのでてきとうです)

NameVirtualHost *:80
Listen 192.168.0.15:80
Listen 192.168.0.15:8000
Listen 192.168.0.15:8001

こんなふう。
で、sites-avaiablesだかの中の各種vhostsに

<VirtualHost *:8000>(略)</VirtualHost>

こんなん。ほかにもなんかやってたかも知れないけどもう覚えてない。
で、これをNginxでも何とかしたい。

    server {
        listen 8000;
        listen 80;
以下略

余裕だった。正しいのかはいまいちわかんないけど間違ってはいないだろう。
自宅からはIPアドレス:ポート番号(この場合8000番)で見に行く。これは従来どおり。
外からは名前解決できるのでドメイン+80番で見に来ると。
listen 80のほうを消したりコメントすれば、外からは見にこれない。
自宅からしかいじらないphpMyAdminなんかはlisten 80は書かない設定にしています。

あ、うちは外からポート8000で飛び込んできても蹴ってるからというだけですけどね。80番のみ通す格好にしています。これはルータのお仕事。

みたいな話。

pylons make url & redirect

2011-12-22 | NDI, Pylons, Python | コメントはまだありません

from pylons import url
url(controller="main",action="hoge")
>>>'/main/hoge'

なので、

from pylons.controllers.util import redirect
redirect(url(controller="main",action="hoge"))

なわけなのね。
書いてあるimportはcontrollerをpasterで生成するときにもともと書いてある。

pathinfo="/hoge/fuga"
ret = routing.make_map(pylons.config).match(pathinfo)
redirect(url(controller=ret['controller'], action=ret['action']))

うん。