ラベル UNIX一般 の投稿を表示しています。 すべての投稿を表示
ラベル UNIX一般 の投稿を表示しています。 すべての投稿を表示

Debian7.0.0で音が出ないとき

# alsactl init

でマイクから音ができるようになった。

自動起動されるように
# vi /etc/rc.local

alsactl init
を一行追記しておいた。

Day16 CapslockをCtrlに変える

RaspbianでCapslockをCtrlキーに変える方法を書く。なお、もとあるCtrlキーの機能はそのまま。

$ sudo vim /etc/default/keyboard

XKBOPTIONS="terminate:ctrl_alt_bksp"

XKBOPTIONS="terminate:ctrl_alt_bksp, ctrl:nocaps"

あとは、リブートして設定ファイルを読み込むだけ。
$ sudo reboot
なお、この方法はDebianで通用するようである。

【参考文献】
http://gaobin.hatenablog.com/entry/2013/05/18/232617

killを使ってアプリケーションを強制終了

OS Xを使用していると、アプリケーションの強制終了に苦慮することがあります。そこで今回は、killコマンドを用いて指定したアプリケーションを強制終了することを考えます。

今、Google Chromeがフリーズしてしまったとします。
こういった時は、ターミナルを起動して、以下の作業を行います。


ちなみにpsのカラムは、以下のようになります。

PID : Process IDentification
TTY : そのプロセスが実行されているターミナルの生。??であれば、そのプロセスがGUI画面以外で実行されていことを意味する。
TIME : 特定のプロセスを実行するのに要した時間
CMD : 実行しているプロセスの完全なパス名

【参考文献】
Dave Taylor著 酒井皇治訳『入門 Unix for OS X 』オライリージャパン 2013

GNU/Linuxをソースコードからビルドする手順

私たちが普段、Linuxと読んでいるものの実態は実は、Linux kernel + GNU softwareの複合環境なのです。図で示しますと下のようになります。

したがって、GNUの人々はこのような環境のことをGNU/Linuxと呼ぶように主張しています。確かに一理あると思います。

ところで、GNU/Linuxの環境をソースコードよりビルドする時は、段階が多くとても混乱してしまいます。
そこで、今回は各段階の説明をしてみたいと思います。



#1.ファイルシステムの作成とデバイスファイルの作成
  • Filesystem Hierarchy Standard(FHS)に基づいたファイルシステムを構築する。
  • MAKEDEVというスクリプトを用いて/dev内にデバイスファイルを生成する。
#2.各ソフトウェのコンパイルと導入
  • 基本は./configure, make, make installを繰り返すだけだが、./configureの時にオプションを大量に指定したり、make installの時に、インストール先のディレクトリを指定する必要がある。
  • まずは、glibcをコンパイル。glibcは各種コマンドやソフトウェアを実行する際に必ず必要。GNU/Linux環境はほとんどのコマンドやソフトウェアでダイナミック・リンクにてglibcを利用するため、このライブラリがないと各種コマンドが実行できない。
  • ncurses : コンソール端末の表現力を向上させるライブラリ。bashの動作に必須。
  • bash : Linuxの標準シェル
  • util-linux : ログイン関連やttyコマンド、ディスク操作
  • coreutils : シェルの中でよく使うコマンド群を集めたソフトウェアパッケージ。cat, ls, suといったシェル関連コマンドを含む。
  • etc.
#3.カーネルのコンパイル
  • 設定項目が膨大なのので、開発環境の構成ファイルを流用すると良い。
  • makeは場合によって一晩かかる時がある。
  • -jのオプションで時間の短縮が可能。
#4.initramfs(initrd)ファイルの作成
  • initramfsとは、カーネルをロードした後で、一時的にメモリー上に展開したルートファイルシステムを、マウントできるように準備するためのファイルである。
  • 少し前までinitrdという名称で呼ばれていたが、現在はinitramfsに変更されている。
#5.ルートファイルシステムの完成
  • ブート時に起動するプログラムやユーザ名、サービス名、パスワードといった最低限必要となるファイルを作成する。
  • ex)inittab, rc.sysinit, rc*, passwd, group, profile, rsyslog.conf, services, fstab, hosts
#6.記憶媒体に書き込む
  • fdiskによりパーティションを作成
  • mke2fsなどでパーティションをフォーマット
  • ビルドしたGNU/Linuxシステムをシュリンクしてから、アーカイブ、記憶媒体にコピー。
  • ブートローダー(LILO, GRUB)を導入
  • grub.confの設定
#7.各種アプリケーションを導入する
  • 必要に応じて、vimなどのテキスト編集コマンドや、Apacheなどのサーバー関連アプリケーションを追加導入する。
【参考文献】
『日経Linux 2011年11月号』日経BP社

『日経Linux 自分で作るLinux OS 2006』日経BP社
『Software Design 総集編 2001 - 2012』技術評論社







Linuxの起動プロセス

Linuxの起動プロセスの知識は、トラブルが生じた時やkernelやその他環境をソースコードからコンパイルして組み合わせていく時に、重要となります。































【参考文献】
http://jibun.atmarkit.co.jp/lskill01/rensai/lpicdrill06/lpicdrill01.html

Linuxにおけるプロセスの階層性


LinuxシステムではinitのいうPID 1のプロセスの子プロセスという形ですべてのプログラムが生成されます(forkの繰り返し)。
pstreeというコマンドを使用するとプロセスツリーをきれいに表示することができます。

$ pstree


ご覧の通り、initは最上流のプロセスということがわかります。
今回実行したpstreeというプロセスはinit-sshd-sshd-sshd-bash-pstreeのような親子関係を経てやっと実行されているのです。
ちなみにLinuxのkillコマンドはPID 1を特別なものと見なしており、killすることはできません。
#kill関数の仕様を確認
$ man 2 kill





Macにおけるプロセスの階層性

Linuxのプロセスはinitを1番の親プロセスとして子プロセスが再帰的に生成される形態を取っています。
Mac OS Xも同様のシステムを採用しています。
まずは、Macのプロセスの階層性を確認してみます。

#pstreeのインストール

$  wget ftp://ftp.thp.uni-duisburg.de/pub/source/pstree-2.27.tar.gz
$ tar xzvf pstree-2.27.tar.gz
$ gcc -o pstree pstree.c

#pstreeの実行
$ ./pstree


このツリーを眺めてみると、
rootユーザーが実行した/sbin/launchdというプロセスがすべての元のプロセス(PID : 1)ということができます。

そこで、このプロセスを停止(kill)してみるとどのような挙動が予測されるでしょうか。
UNIX系のOSにおいては親プロセスが停止されると子プロセスも強制終了されます。したがって、launchdを停止すると、システムが強制終了されることが予想されます。
実際に行ってみます

#( - 9)は強制終了のためのオプション
$ sudo kill -9 1

見事にシステムはシャットダウンされました。

スパコンにまつわる統計

スパコンの計算速度を基準としたランキングは、世間をにぎわせています。
このランキングは、Top500(http://www.top500.org/)にて閲覧、データダウンロードが可能です。

今回はこのサイトで実装されている解析機能を利用してスパコンに関する様々な統計(http://www.top500.org/statistics/list/)について見てみたいと思います。


/*----------------まずは2012年度のデータについて-----------------*/
http://www.top500.org/statistics/list/
#1.スパコンのベンダーについて(2012年)
巨人IBMがやはり最強といったところでしょうか。Fujitsu応援しています。
#2.OSについて(2012年)
Linuxが90%以上の圧倒的なシェアを占めています。Linuxはソースコードがオープンであるために、細かいチューニングが可能であり、ハイエンドユーザーにとって理想的なOSであるからだと考えられます。
#3.国別シェア
国別シェアでは予想されるようにアメリカが半分を占めています。中国がその次に来ていて日本は世界第3位です。GDPの順番を見ているような気持ちになります。


/*----------------各種データの経時的変化について(Development Over Time)-----------------*/

#4.ベンダーシェアの経時的変化
2008年頃からkaraIBMとHPが急速にシェアをのばしていることがわかります。Cray Inc.やSGIは一方でシェアを奪われてしまったようです。

#5.OSのシェアについて
ここ20年間の間でスパコンのOSはUNIX系OS(Unix, BSD, Linux)が圧倒的な地位を占めてきたことがわかります。その中でも面白いのがLinuxの急速な拡大です。Linuxは1991年に開発が開始されたとされていますが、それから10年もしないうちにスパコンで使用されるようになり、現在では90%を超えるスパコンに使用されていることがわかります。

Mac OS XのFilesystem Hierarchy


Mac OS XはUNIXベースのOSであることは周知の事実である。
Mac OS XはUNIXベースでありながら、Filesystem HierarchyはLinuxのそれとは若干異なっている。
詳しくは、
https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/hier.7.html
で確認することができる。
今回の環境はv10.6なので
https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/10.6/man7/hier.7.html
が適している。


Terminal上でもMacのFilesystem Hierarchyの仕様は確認が可能である。

まず、実際のルート直下のディレクトリ構成を確認してみる。


$ ls /
Applications Library      System       Volumes      cores        etc          mach_kernel  private      tmp          var Developer    Network      Users        bin          dev          home         net          sbin         usr

manコマンドでhierを参照すると、各ディレクトリおよびファイルの内容が詳しく表記されている。

$ man hier
------------------------------------ここから-------------------------------
HIER(7)              BSD Miscellaneous Information Manual              HIER(7)

NAME
     h hi ie er r -- layout of filesystems

DESCRIPTION
     A historical sketch of the filesystem hierarchy.
     http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/     outlines the modern Mac OS X filesystem.

     /             root directory of the filesystem

     /bin/         user utilities fundamental to both single-user and multi-
                   user environments
--------------------------------------以下省略-----------------------------

実際にはHIER(7)をベースとして大分変更がなされており、http://osxdaily.com/2007/03/30/mac-os-x-directory-structure-explained/で説明されているような構造となっている。

例のごとくFreemindを用いてMacのファイルシステムの階層を整理すると以下のようになる。




Filesystem Hierarchy Standard(FHS)

今回は、UNIX系OSのファイルシステムの標準規格であるFilesystem Hierarchy Standard(FHS) http://www.pathname.com/fhs/ について勉強しました。
FHSの目標はabstractにある以下の文章によって表現されています。

"This standard consists of a set of requirements and guidelines for file and directory placement under UNIX-like operating systems. The guidelines are intended to support interoperability of applications, system administration tools, development tools, and scripts as well as greater uniformity of documentation for these systems."

要するに、UNIXのファイルやディレクトリに関しての標準規格を定めることで、異なるUNIXシステム間の互換性を高めようと意図しているようです。

Freemindを用いてFHSの定めるファイルシステムの階層構造を表現してみました。



FHSの定める階層構造は、大変洗練されており、情報科学以外の他の学問領域にも応用が効くように思います。


【参考文献】
Filesystem Hierarchy Standard — Version 2.2 final Filesystem Hierarchy Standard Group edited by Rusty Russell and Daniel Quinlan  http://www.pathname.com/fhs/

UNIXコマンドのまとめ

UNIXコマンドをFreemindを用いて系統的にまとめました。

【参考文献】
林晴比古『Linux/UNIX入門』2000 SOFT BANK Publishing v - xx pp

牛を描写するコマンド

牛を描写するコマンド、cowsayを紹介します。
このコマンドは、コメントと共にかわいい牛をターミナル内に描写することができます。
方法は簡単。
(以下はUbuntu 10.04の環境を前提とします)

# cowsayのインストール
$ sudo apt-get install cowsay

# cowsayの実行
$ cowsay "Hey, you"

 __________
< Hey, you >
 ----------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

これはかわいいですね(^^)
こんなおちゃめなコマンドがソースコード付きで公開されているなんて楽しい世界ですね。この遊び心に、多くのことを学びました。




UbuntuにApache2をインストール

APACHEはクライアントからの要求に応じてhtmlファイルを配布する仕事を担うWebサーバーのことを指します。
#ubuntuにapache2をインストール。
sudo apt-get install apache2

#デーモン管理ツールであるsysv-rc-confをインストール
sudo apt-get install sysv-rc-conf

#sysv-rc-confを起動し、ランレベルの2-5においてonにする。
apt-get sysv-rc-conf
#方向キーで移動して、スペースキーでオンオフの変更ができる。

/var/wwwディレクトリの所有権


/var/wwwディレクトリはAPACHEがファイルを配布するときのドキュメントルートとなっています。

ここは所有者がroot、所有グループがrootであるため、このディレクトリの中に所有者が自分であるディレクトリを作っておきましょう。

$ ls -l
合計 12
-rw-r--r-- 1 root root  177 2013-01-02 10:37 index.html
-rw-r--r-- 1 root root   21 2013-01-02 11:31 info.php
drwxr-xr-x 2 root root 4096 2013-01-04 00:28 web
$ sudo chown kappa.kappa web
$ ls -l
合計 12
-rw-r--r-- 1 root  root   177 2013-01-02 10:37 index.html
-rw-r--r-- 1 root  root    21 2013-01-02 11:31 info.php
drwxr-xr-x 2 kappa kappa 4096 2013-01-04 00:28 web

#これで、/var/www/webディレクトリにはkappaユーザーが自由にファイルを配置することが可能になりました。

mysqlの文字コード設定


#virtual box内のubuntu 10.04のmysqlの文字コードをutf8に変更する

$ mysql -u root -p

mysql>  show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                       |
+--------------------------+----------------------------+
| character_set_client     | latin1                      |
| character_set_connection | latin1                 |
| character_set_database   | latin1                  |
| character_set_filesystem | binary                 |
| character_set_results    | latin1                    |
| character_set_server     | latin1                    |
| character_set_system     | utf8                      |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)


$ sudo vim /etc/mysql

#/etc/my.cnfに以下の6行を追記する。
sudo vim /etc/mysql/my.cnf

[mysqld]
default-character-set=utf8
character_set_server=utf8
skip-character-set-client-handshake
[mysql]
default-character-set=utf8

#mysqlの再起動
$ sudo /etc/init.d/mysql restart

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                       |
+--------------------------+----------------------------+
| character_set_client     | utf8                         |
| character_set_connection | utf8                    |
| character_set_database   | utf8                    |
| character_set_filesystem | binary                 |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                      |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

#文字コードは無事utf8に統一された。

Virtual boxのLinuxのIPアドレスを固定する(Ubuntu 10.04)


Virtual boxにインストールしたUbuntu10.04のIPアドレスの固定を行います。


$ sudo vim /etc/network/interfaces


auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
gateway 192.168.56.1


$ sudo reboot 



#固定のIPアドレスに対してホストOSからアクセス可能なのを確認
[mac]$ ssh 192.168.56.101

Virtualboxのゲストマシーンにssh接続

mac os x10.6.8
vrtualbox 4.2.6
ubuntu 10.04

の環境を前提に書きます。


virtualbox を起動して、画面左上のvirtualboxの中のpreferenceをクリックします。

次にNetworkをクリックして、プラスボタンを押し、追加します。追加したものを選んで、ドライバーマークをクリックすると「edit host-only network」をクリックします。すると、IPV4やMACが表示されるので、とりあえずデフォルトでOKを押します。








次にOS選択画面のSetting -> Networkをクリックして、host-only Adaptor ,  vboxnet0, Denyとして設定を行い、okを押します。




あとは、ゲストにsshサーバーをインストールすればよいです。

$ sudo apt-get update
$ sudo apt-get install openssh-server


ホスト側から、
$ ssh 192.168.56.101
と入力して、ゲスト側のユーザーとパスワードを入力すればログイン可能です。

GRUBに関連するファイルを確認する。


Vine Linux 5.2 の環境を前提のお話。
マシーンはLet's CF-T7

###デフォルトインストールの状態で、マウントされているデバイスを確認。
###/dev/sdaがハードディスクを表している。

[root@localhost kappa]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
none on /proc type proc (rw)
none on /proc/bus/usb type usbfs (rw)
none on /sys type sysfs (rw)
/dev/sda1 on /boot type ext3 (rw)  (ブート関連のディレクトリ)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

###ハードディスクのパーティションの構成を確認
###ちなみにgrubは/dev/sdaのMBR(Master Boot Sector)と呼ばれる、ハードディスクの最初のセクターに記述されている。
[root@localhost kappa]# fdisk /dev/sda
コマンド (m でヘルプ): p

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000d5b1f

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14       14593   117113850   8e  Linux LVM

: q

###ブート関連のディレクトリをのぞく

[root@localhost boot]# ls -l /boot
合計 7163
lrwxrwxrwx 1 root root      23 11月 4日 11:48 System.map -> System.map-2.6.27-52vl5
-rw-r--r-- 1 root root 1136599  1月10日  2010 System.map-2.6.27-52vl5
lrwxrwxrwx 1 root root      23 11月 1日 13:19 System.map.old -> System.map-2.6.27-52vl5
-rw-r--r-- 1 root root   88489  1月10日  2010 config-2.6.27-52vl5
drwxr-xr-x 2 root root    1024 11月 3日 12:21 grub/
-rw------- 1 root root 3798240 11月 1日 13:32 initrd-2.6.27-52vl5.img
lrwxrwxrwx 1 root root      23 11月 1日 13:19 initrd.img -> initrd-2.6.27-52vl5.img
lrwxrwxrwx 1 root root      23 11月 1日 13:19 initrd.old.img -> initrd-2.6.27-52vl5.img
-rw-r--r-- 1 root root     405 11月 1日 13:19 kernel.h
drwx------ 2 root root   12288 11月 1日 13:17 lost+found/
lrwxrwxrwx 1 root root      20 11月 1日 13:19 vmlinuz -> vmlinuz-2.6.27-52vl5
-rw-r--r-- 1 root root 2261776  1月10日  2010 vmlinuz-2.6.27-52vl5
lrwxrwxrwx 1 root root      20 11月 1日 13:19 vmlinuz.old -> vmlinuz-2.6.27-52vl5

###grubの設定ファイルの中身をみる
#menu.lst に対してリンクが張られていることがわかる。
[kappa@localhost grub]$ ls -l /boot/
合計 367
-rw-r--r-- 1 root root    197 11月 1日 13:32 default
-rw-r--r-- 1 root root     63 11月 1日 13:32 device.map
-rw-r--r-- 1 root root     30 11月 1日 13:19 device.map.rpmsave
-rw-r--r-- 1 root root   7552 11月 1日 13:32 e2fs_stage1_5
-rw-r--r-- 1 root root   7392 11月 1日 13:32 fat_stage1_5
-rw-r--r-- 1 root root   6688 11月 1日 13:32 ffs_stage1_5
lrwxrwxrwx 1 root root     10 11月 1日 13:32 grub.conf -> ./menu.lst
lrwxrwxrwx 1 root root      8 11月 1日 13:19 grub.conf.rpmsave -> menu.lst
-rw-r--r-- 1 root root   6688 11月 1日 13:32 iso9660_stage1_5
-rw-r--r-- 1 root root   8160 11月 1日 13:32 jfs_stage1_5
-rw-r--r-- 1 root root    813 11月 3日 12:21 menu.lst
-rw-r--r-- 1 root root     37 11月 1日 13:19 menu.lst.rpmsave
-rw-r--r-- 1 root root   6848 11月 1日 13:32 minix_stage1_5
-rw-r--r-- 1 root root   9216 11月 1日 13:32 reiserfs_stage1_5
-rw-r--r-- 1 root root  41458 11月 3日 12:06 splash.xpm.gz
-rw-r--r-- 1 root root    512 11月 1日 13:32 stage1
-rw-r--r-- 1 root root 100426 11月 1日 13:33 stage2
-rw-r--r-- 1 root root 100426  1月21日  2009 stage2_eltorito
-rw-r--r-- 1 root root  41458 11月 3日 01:46 tux.xpm.gz
-rw-r--r-- 1 root root   7040 11月 1日 13:32 ufs2_stage1_5
-rw-r--r-- 1 root root   6240 11月 1日 13:32 vstafs_stage1_5
-rw-r--r-- 1 root root   8904 11月 1日 13:32 xfs_stage1_5

# less /boot/grub/menu.lst

############ここから#############
# menu.lst generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5

splashimage=(hd0,1)/boot/grub/splash.xpm.gz

title Vine Linux (Kappa kernel)
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/VolGroup00/LogVol00 resume=swap:/dev/VolGroup00/LogVol01 vga=0x314 splash=silent 
        initrd /initrd.img

title Vine Linux (Previous kernel)
        root (hd0,0)
        kernel /vmlinuz.old ro root=/dev/VolGroup00/LogVol00 resume=swap:/dev/VolGroup00/LogVol01 vga=0x314 splash=silent 
        initrd /initrd.old.img
############ここまで#############


###実際に、設定ファイルに内容がgrubに反映されていることを確認する。
###リブートして、grubを開き、「e」を押す

root (hd0,0)
kernel /vmlinuz ro root=/dev/VolGroup00/LogVo100 resume=swap:/dev/Vol01 vga=0x314 splash=silent
initrd /initrd.img

buildrootを用いてusbブートのLinuxをビルドする。

ネット上の様々な有用情報を頼りにして、buildrootとLinuxカーネルのソースコードから、usbブート可能なLinuxをビルドし、usbにgrubとともにインストールすることができました。一連の行程を備忘録として残しておきます。

USBから起動できる最小構成のLinuxをビルド。

<参考Web site>

<(0)開発環境>
Vine Linux 5.1 on Let's note CF-T7
ユーザー名:kappa

※今回作成するMinuxというネーミングはhttp://plaza.rakuten.co.jp/slothstyle/diary/201105150000/のブログのものです。すばらしい内容で大部分を参考にさせていただきましたので、敬意を込めてそのままの名前を使用させていただきます。

<(1)ルートファイルシステムの作成>
Buildrootというソフトウェアを利用/buildrootとはルートファイルシステムを作成するためのtoolchan。uClibcやbusyboxをはじめとする様々なプログラムをビルドするためのMakefileやpatchで構成されている。
###Buildroot(buildroot-2011.02.tar.gz)をダウンロードする。
$ pwd
/home/kappa
$ mkdir minux
$ cd ./minux
$ wget http://buildroot.uclibc.org/downloads/buildroot-2011.02.tar.gz
$ tar -zxvf buildroot-2011.02.tar.gz

###Buildrootのソースコードダウンロード先ディレクトリを作成。Buildrootの設定でダウンロード先を指定することで、ダウンロードファイルを一箇所にまとめて共通化が可能。
$ pwd
/home/kappa/minux
$ mkdir buildroot-dl

###ビルドディレクトリを作成。 "minux" を親ディレクトリとし、Buildroot用に "br" という子ディレクトリを作成。
$ pwd
/home/kappa/minux
$ mkdir br

###"allnoconfig" でBuildrootの設定を初期化します。
$ pwd
/home/kappa/minux
$ make -C  /home/kappa/buildroot-2011.02 O=/home/kappa/br allnoconfig

###Buildrootの設定
$ cd ./br
$ make menuconfig

以下のようにオプションを設定。

(a)
Build options -> Download dirの
"$(TOPDIR)/dl"
"/home/admin/minux/buildroot-dl"
に変更。

(b)
BusyBoxをビルドするように設定。
Package Selection for the target -> BusyBox /// ON

(c)
ルートファイルシステムのイメージファイルをcpio形式に指定。
Target filesystem options -> cpio root filesystem /// ON

exitした後、ビルドする。
(1時間ほどかかりました。自分の環境 core 2 duo, 1.20GHz。ファイルダウンロードが行われるため、インターネット接続は必須です。)

$ make all

### fakeroot_1.9.5..tar.gzがダウンロードできないことが理由でインストールが止まるので、該当ファイルをダウンロードし適切な位置に配置
$ mv fakeroot_1.9.5.tar.gz /home/kappa/minux/buildroot-dl/
$ make all

ビルドに成功すると、/br/images/rootfs.cpio" というファイルが作成されます。これがcpio形式でアーカイブされたルートファイルシステムのイメージファイルになる。
###ルートファイルシステム(rootfs.cpio)を圧縮し、/home/kappa/minuxにinitrdという名前でコピーしておく。
$ gzip /home/kappa/minux/br/images/rootfs.cpio
$ cp /home/kappa/minux/br/images/rootfs.cpio.gz /home/kappa/minux/initrd

<(2)最小構成でkernelをビルド>
続いてUSBブートするための最小構成のカーネルをビルドする。
###linux-2.6.37.2のソースコードをダウンロードしてビルドした。
 $ pwd
/home/kappa/minux/
$ wget http://www.kernel.org/pub/linux/kernel/v2.6//linux-2.6.37.2.tar.bz2
$ tar jxf linux-2.6.37.2.tar.bz2
$ mkdir kernel

###allnoconfigで設定を初期化を行う。
$ make -C ./linux-2.6.37.2 O=/home/kappa/minux/kernel allnoconfig
$ cd kernel
$ make menuconfig

###以下のオプションを有効化する。モジュール化はせず、カーネルに組み込む。(モジュールはallnoconfigで無効になっている。)

・General setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support /// ON
!!圧縮ファイルの展開関連のオプションも自動的に有効化される。!!

・Executable file formats / Emulations
-> Kernel support for ELF binaries /// ON
-> Write ELF core dumps with partial segments /// ON (auto)

###ビルドします。"bzImage"が生成されれば成功。

$ make bzImage
...
Setup is 14008 bytes (padded to 14336 bytes).
System is 770 kB
CRC 5b2917a6
Kernel: arch/x86/boot/bzImage is ready (#1)
のように表示が出れば成功。




<(3)USBメモリ(/dev/sdb)へのMinimal Linux の導入>

###まずはusbをフォーマット
$ su 
# fdisk /dev/sdb
p (パーティション内容の表示)
d (パーティションの削除)
n (パーティションの作成. デフォルトで/dev/sdb1というパーティションが生成する。)

###usbの/dev/sdb1をext3でフォーマット
# mkfs.ext3 /dev/sdb1

###usbをアマウントして再度場所を変えて(/mnt/usb)マウント(わかりやすくするためである)
# umont /dev/sdb1
# mount /dev/sdb1 /mnt/usb


###grubをインストールする。
# mkdir /mnt/usb/grub
# cp /boot/grub/stage* /boot/grub/e2fs_stage1_5 /mnt/usb/grub/
# umount /mnt/usb

###/dev/sdb1にMBR(master boot record)をインストールする。MBRはブート処理専用としてデバイス上に各区帆された512byteの非表示領域である。MBRのインストールには、GRUB関連の処理を行うシンプルなコマンドシェル、GRUBシェルを使用する。
# grub
grub> device (hd0) /dev/sdb
grub> root (hd0, 0)
grub> setup (hd0)
grub> quit

###usbの/dev/sdb1にビルドしたルートシステム(/home/kappa/minux/initrd)とカーネルイメージ(/home/kappa/minux/kernel/arch/i386/boot/bzImage)を/dev/sdb1のルート(/mnt/usbにマウントした状態では、ビルド環境のマシーンから見ると/mnt/usb/がルートディレクトリ)にコピーしていく。
# mount /dev/sdb1 on /mnt/usb
# cp /home/kappa/minux/initrd /mnt/usb/
# cp /home/kappa/minux/kernel/arch/i386/boot/bzImage /mnt/usb/


###grubの設定ファイルに、/dev/sdb1の構成を書き込む。 bzImage及び、initrdが/dev/sdb1のルートディレクトリにおいてあるだけのので、素直にその旨を記述する。
# vim /boot/grub/menu.lst

////////////////////////////////////
title Minimal Linux
kernel /bzImage root=/dev/sdb
initrd /initrd
////////////////////////////////////

<(4)おわり>
再起起動すれば、BIOSの設定がUSB起動になっていれば、CUIでLinuxが起動する。
"root" ユーザーでログイン可能。
パスワードは未設定である。

TeXworks、TeXShopの紹介

texで数式を文中に含む文書を書くとき、どうしてもスクリプトを書くのとコンパイルの作業の行き来が面倒です。

そこで、TeXworksやTeXShopを用いると、簡単にtexのファイルをコンパイルしてpdfファイルにすることができます。

どちらもhttp://www.tug.org/mactex/からMacTeX をダウンロードしてインストールすれば、自動的に使用可能となります。

スクリプトの修正も迅速にできます。




#TeXworks

#TeXShop