Linux / Unix / Interix」カテゴリーアーカイブ

fpm を使って任意のプログラムを rpm にまとめてみる。

みむらです。
作業中に見つけたことで、たぶん今後も使いそうな気がするのでメモ。

SPEC ファイルがあれば rpmbuild で一発なのですが、
そんなうれしいことはあまりないので、どうしようかと。

fpm コマンドを使うと良い感じに rpm にまとめてくれるので、
これを使ってみましょう、というそんな話。


1.fpm の準備

yum install gcc ruby ruby-devel ruby-libs rubygems rpm-build
gem install fpm

rubygem で提供されているのでそれ経由で入れる。


2.普通にコンパイル

今回は ruby で試しました。

configure の時は、

prefix を “/usr” に向けておくと良い感じです。

(別に /usr/local/ でも大丈夫だとは思いますが、気分的に。)

あとは make に “-j” を付けて CPU を良い感じに唸らせて。

(他にこのプログラムで使うパッケージがあれば入れておく。)

 

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
tar zxvf ruby-2.1.2.tar.gz
cd ruby-2.1.2
./configure --prefix=/usr
make -j8

3. rpm を作る

make が完了したら、

出力用のフォルダを作ってそこに出力します。

私の場合はホームディレクトリ以下に ruby というディレクトリを作成しました。

mkdir ~/ruby

でもって、コンパイル結果をそのディレクトリに向けて出力します。

make install DESTDIR=~/ruby

インストールが完了すると、指定したディレクトリ内にファイルが作られます。

[mimura1133@localhost ruby]# find ~/ruby
/home/mimura1133/ruby
/home/mimura1133/ruby/usr
/home/mimura1133/ruby/usr/lib
/home/mimura1133/ruby/usr/lib/pkgconfig
/home/mimura1133/ruby/usr/lib/pkgconfig/ruby-2.1.pc
/home/mimura1133/ruby/usr/lib/libruby-static.a
/home/mimura1133/ruby/usr/lib/ruby
/home/mimura1133/ruby/usr/lib/ruby/site_ruby
/home/mimura1133/ruby/usr/lib/ruby/site_ruby/2.1.0
/home/mimura1133/ruby/usr/lib/ruby/site_ruby/2.1.0/x86_64-linux
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby/2.1.0
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby/2.1.0/x86_64-linux

 

次にホームディレクトリに移動して、 fpm コマンドを使って rpm パッケージを作ります。

 

なお、 fpm コマンドについてのヘルプは下記URL にあります。

 https://github.com/jordansissel/fpm/wiki

・・deb パッケージを作ったり、deb から rpm にしたりとかも出来るっぽいですね。

 

何も気にせずさくっと作るのであれば、

fpm -s dir -t rpm -n (名前) -v (バージョン) -C (出力したディレクトリ) -p (RPMファイル名) usr/

というような、こんな感じ。

 

なので先ほどまでやっていた ruby の場合は、

fpm -s dir -t rpm -n ruby -v 2.1.2 -C /root/ruby -p ruby-2.1.2.rpm usr/

こんな感じ。

 

凝る場合は “-d” で依存関係を指定できるので

-d “openssl-devel (> 1.0.1)”

とか。こういう感じで。

 


4.出来た RPM をインストールする。

あとは、

rpm -ivh ruby-2.1.2.rpm

とか叩いてインストール。

削除の場合は

rpm -e ruby-2.1.2

としてもいいし、

yum remove ruby

とかやっても消えます。

Linux で trim を行う

みむらです。メモがてら。

ext4 だと trim をファイルシステムが対応しているようで、
マウント時に “discard” をオプションとして指定してマウントすればおっけー。

mount コマンドの場合は次のような感じに

mount –o discard /dev/sdb1 /mnt/hogeo

fstab の場合は次のような感じに

/dev/sda2     /     ext4     noatime,discard     0     1

 

任意のタイミングで trim を掛けたい場合は

( Windows のデフラグツールで  defrag C: /L  を実行するようなことをしたい場合 )

fstrim  コマンドを用いる。

使い方についてはこのへんにばっちりと

Man online – fstrim (8)

使い方としては、

fstrim (マウント場所) 

となるので、

fstrim /boot
fstrim /

とすると、一通り trim を掛けることが出来るっぽい。


余談ですが、

Hyper-V の仮想ハードディスクに対しても

このコマンドで trim (実際に送信されるのは unmap) を送って、

ディスクの最適化を行うと、ちゃんと vhd / vhdx サイズが縮まります。

( Win8.1 搭載の Hyper-V で確認 )

Linux 上で Hyper-V の動的メモリやらいろいろと使えるようにしてみた。

どうもみむらです。

今回の内容は、需要がニッチすぎるだとか激コワだとか、なんかいろいろと言われていますが、
自己満足の内容です。

 

・・こわくないよ!

 

動的メモリというのは、Hyper-V 上において、
ゲストマシン(仮想で動かしているマシン)のメモリ需要にあわせてホストで確保するメモリの量を変化させるというものでしょうか。

早い話が、ゲストでメモリを使っていなければホスト上でメモリを解放して、
使いそうならホストに空きがあればより多くのメモリを割り当てる、とそんな感じ。

 

結論とすると、

image

こんな感じで動くように。

 

勿論、普通の Linux を動かしますと、

image

こんな感じで対応していませんので動作することはありません。

 

その他、Linux のカーネルを作る際に Hyper-V のゲストモジュールを組み込んだとしても、

image

執筆時最新の Version 3.8.7 でもこんな感じですので、ホスト側にメモリの利用状況は伝えられますが、
縮小、拡大処理は行われません。

 


その他、

image

こういう感じのスナップショット系・・なんですかね中身はまだ見てないのでアレですが、
そういうのを追加してみたり、

image

Hyper-V 用の Framebuffer ドライバを入れてみたり。 いろいろといじりました。

 

image

あとはやっぱり、こんな感じで Gnome を Hyper-V で動かしてみたり。

 


続きを読む

MinGW を使って Gnu 系のコマンドを使えるようにする。

みむらです。

前までは、この記事 にあったように GnuWin32 を使っていたのですが、古いなと思いまして。
Gow とかも選択肢にはあったのですが、もういっそ MinGW とか試してみるかと思って試してみました。

結果としては非常によく、
パスを設定すればコマンドプロンプトからも利用できるので、 GnuWin32 の移行先として、
問題ないように感じました。

image

CygWin のように、変にシステムを汚すような事もないような感じですので、
早速 GnuWin32 から移行しました。


導入:

1.MinGW をインストールする。

SourceForge 上のプロジェクトのダウンロードページへ移動します。
http://sourceforge.net/projects/mingw/files/

image

深く潜らなくとも、
”Looking for the latest version?” という事でダウンロードリンクが張られていますので、
こちらからダウンロードします。

 

ダウンロードが完了し、起動しますと次のような画面が出ますので、ウィザードに従ってインストールを進めます。

image

 

また、スタートメニューに関しては、項目が増えるのを嫌う場合は
項目を作成しないようにしても構いません。

image

 

また、 Select Components の画面では、今回のケースの場合、
最低限でも下2つの項目にチェック を入れます。

image

なお、元々開発用のツールですので、
ディスクに余裕があれば、コンパイラもインストールしておきますといいかと思います。

 

そのまま進めますと、
image

このような画面が出てきて処理を開始しますので、完了まで待ちます。

 

最後までウィザードを進めれば完了です。


2.パスの設定 – システムのプロパティを表示。

設定をするために、システムのプロパティを開きます。

 

手順 ( Windows キーがあるキーボードの場合

 

2.1.1 Winキー + R を押し、 「ファイル名を指定して実行」を表示し、「 sysdm.cpl 」と打ち、 OK を押します。

image

2.1.2 システムのプロパティが表示されます。

image

2.1.3 詳細設定タブに切り替えます。

image

 

 

手順 ( Windows キーがない場合

 

2.2.1 コントロールパネルを開きます。

image

2.2.2. 「システムとセキュリティ」を選択します。

image

2.2.3. 「システム」を選択します。

image

2.2.4. 「システムの詳細設定」を開きます。

image

 


3.パスの設定

「環境変数」をクリックします。

image

 

「システム環境変数」内から「Path」を探して選び、「編集」をクリックします。

image

 

編集ダイアログが開きます。

image

 

ここで、先ほどインストールした MinGW のパスをエクスプローラで開き、
パスを確認します。

確認する部分は2点あり、
MinGW 直下の bin フォルダおよび、 msys フォルダ以下にある bin フォルダを探します。

 

なお、執筆時点 (2012/11/19) で、
デフォルトのままインストールを行った環境では、

C:\MinGW\bin
C:\MinGW\msys\1.0\bin

の2つを path に追加します。

 

ただ、今後のバージョンアップや、インストールディレクトリの変更によって変化する可能性が考えられますので、
その際は適宜読み替えてください。

 

確認が完了しましたら、変数値の文字列の後ろ
セミコロン ( ; ) 区切りで、パスを追記していきます。

 

執筆時点の状態で、デフォルトインストールした場合は先述の2ディレクトリとなりますので、
この場合追記するのは、次のような文字列となります。

;C:\MinGw\bin;C:\Tools\MinGW\msys\1.0\bin

image

 

追記が完了しましたら、 “OK” を押して行き、画面を閉じます。

 


4. 文字化け対策

ここまで完了しますと、あらゆるプログラムから簡単に呼び出せるようになっています。

例:

image

 

ですが、まずこの状態ですと、 ls コマンドが文字化けを起こしますので、

テキストエディタを起動し、

@ls.exe -–show-control-chars --color=auto %*

と記述し、

MinGW のフォルダ内の bin フォルダ  (デフォルトのインストール先であれば、 C:\MinGW\bin)に、

ls.cmd という名前で保存します。

 

※Unix-like に alias のようなコマンドで設定したい、 .profile のような仕掛けで自動的に・・という場合は、

Windows のコマンドプロンプトで .profile みたいなの – みむらの手記手帳

こちらの記事を参照して設定をお願いします。

 


以上が追加方法になります。

また、コマンドを追加する場合は、

mingw-get install (package)

のようにすればインストールされます。

 

mingw-get list

このコマンドによって、インストール可能なパッケージの情報が出てきますので、

grep でフィルタを掛けると、目的のパッケージがインストールできるのではないかと思います。

 

例:

wget をインストールする。

mingw-get install msys-wget

 

ファイルは事前にパスを通してある場所にインストールされますので、

追加直後から使用する事ができます。

 

また、 bash も呼び出せますので、Windows のコマンドプロンプトと適宜行き来をおこなったり、

mintty を使えるようにする | dogmap.jp

http://dogmap.jp/2011/11/15/mintty/

こちらのウェブサイトにおいて紹介されておりますような、 mintty を利用するなど、

GnuWin32 よりもかなり使える環境が手に入るのではないでしょうか。

NS レコードを書いて、外向けのIP アドレスを取ってこれるようにする。

みむらです。

FTPS をやろうとして、グローバルIPアドレス を取ってこようとしたときに、
今まで、昔使っていたドメイン名を一つ生かしておいて、そこから取得していました。

なんだかんだで面倒なことになったので、
今持っているドメインのうち、適当なサブドメイン名を一つ決めて、
そこに問い合わせたらグローバルIPアドレスが返るように設定することにしました。

 

環境:

CentOS 6.2
BIND 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.2

自分でドメインを持ってること。


・基本的な設定は済んでいる環境を想定しているため、そのあたりは割愛します。

 

たぶん大体、以下のような設定が書かれていると思います:
(ゾーンデータベースって言うんですかね・・?これ)

@       IN      SOA     example.com.  root.example.com.(
                                      2012052923
                                      3600
                                      900
                                      36000
                                      3600 )
              IN NS    example.com.
@               IN A      127.0.0.1
*               IN A      127.0.0.1

ここで、適当にサブドメイン名を一つ決めて、それに併せて NS レコードを設定していきます。

ex )

osoto.example.com のアドレスを問い合わせると、グローバルIPアドレスが返るようにする。

(それ以外はプライベートIPアドレスが返る。

自分が保持しているドメインに関して、外向きには ns.hogehoge.net というネームサーバが存在する。

(この辺は whois コマンドで調べるとおいしい。大体、ドメインの購入元の会社が提供してくれていることが多い。

 

この場合:

osoto         IN NS    ns.hogehoge.net

と書き加えます。

[サブドメイン名]    IN NS [外部のネームサーバ]

書き方はこんな感じ。

 

まとめますと、

@       IN      SOA     example.com.  root.example.com.(
                                      2012052923
                                      3600
                                      900
                                      36000
                                      3600 )
              IN NS    example.com.
osoto         IN NS    ns.hogehoge.net
@               IN A      127.0.0.1
*               IN A      127.0.0.1

こういう感じに。