授業資料/04 の変更点


#contents

* 授業内容 [#b5f58194]

これまでの作業ででてきた概念などについて,あらためて説明する.
なお,これまでの作業に追い付いていないというものは急いで追い付こう.

* これからの作業環境 [#yc17d3be]

** 文字端末 [#kc1809f2]
とりあえず GUI (X 環境) が使えるようになったので,その上で Terminal Emulator を用いるのがなにかと便利である. よってこの方法を主として使っていくことにしよう((もちろん,X を立ち上げない状態のコンソールを使っても構わない)).

Gnome の場合,デフォルトでは「アプリケーション」→「アクセサリ」→「端末」とするととりあえず基本的な文字端末エミュレータが立ち上がるはずである. 

- 他にも, インストールしてあれば多様な文字端末エミュレータ(kterm や rxvt など)が使える.
GNOME 端末の中で
 kterm &
 rxvt &
などとして立ち上がるか試してみよう(使ってみたいがインストールされていない,というならば portinstall でインストールしよう).
使ってみてそちらが気に入ったのだったら,メニューから使えるようにしておくのもよいだろう.

** 複数のコンソール [#s8bed1dd]
FreeBSD は起動した後すでに複数のコンソールが立ち上がっている. イメージとしては,モニタとキーボードが複数繋がっていると思えばよい.
具体的にどうなっているかは,
  less /etc/ttys
としてみよ. その中で 4カラム目が "on" になっているものが生きているコンソールであり,デフォルトでは ttyv0〜ttyv7 の8台が既に動いているのが分かる.

実際にはモニタ/キーボードが一組しか繋がっていなくても,これら複数のコンソールを切り替えて使えるとなにかと便利である. それには Alt+F2 などとすればよい((Alt+F2 だと2つめのコンソール,Alt+F3 だと3つめのコンソールになる)). ちなみに,X を立ち上げている状態からは Ctrl+Alt+F2 などとしないといけない.

** (実習) [#z11a70ac]
&ref(./notes.png); 上記のコンソール切り替えを試してみよう. そして,元に戻ってみよう(( X に戻るに  は Alt+F9 あたりか)).

** エディタ [#a1fc038a]
Unix系 OS の管理の基本はテキスト形式の設定ファイルをエディタで編集する作業と,文字端末でのコマンド入力作業である((最近は管理用の GUI も多いが,たいていのものは「かぶせただけ」である)). そこで,エディタについても触れておく.

Unix でのエディタは基本的に
- Emacs 系(日本語が使いやすいようにパッチが当たっているものは [[Emcws:http://emacs-20.ki.nu/emcws.shtml]] とよばれる)
- Vi 系(実質的には,その後継と目される [[VIM:http://www.vim.org/]] が使われることが多い)

のいずれかを使うことになるだろう(理由は様々あるが).
&ref(./warning.png); emacs か vi が使えないと unix の cui 環境の使いこなしは無理に近い.覚悟を決めて,いずれかのエディタになれよう.

ただし,いずれもユーザインタフェースの壁が高く初心者にはツライものがあるので,Unix 系 OS の多くは初心者用に緊急避難的なエディタを用意している.
これまでにも使ったように,FreeBSD では "ee" という簡易エディタが用意されているので,初心者はこの名前を覚えておくと良いだろう.

** シェル設定 [#v56d08e5]

Unix での CLI 環境では,実質的にシェルと呼ばれるソフトウェアと対話して作業を行う. 
そのため,どのようなシェルを選ぶのか,また,どのようにシェルの設定を変えるかで使い勝手が変わってくる.
詳しくは[[2006年度の授業資料:http://www.cas.cmc.osaka-u.ac.jp/~paoon/Lectures/2006-7Semester-AppliedMath7/04.html#cuienv]]を見てもらうなどで分かるが,よくわからんという人も,
ホームディレクトリの .cshrc のほぼ最後の方の if ( $?tcsh ) then の直後にでも
  set prompt = "%{\e[0;32m%}%m%{\e[0m%}<%U%n%u>%{\e[1;34m%}%~%{\e[0m%} <%h>"
などという一行を書き加えて,
  source ~/.cshrc
としてみて,シェルの設定で何が変わるか一端だけでも体験してみよう.

&ref(./warning.png); prompt の設定を上手に行うと何かと便利だ.少し凝ってみよう.
&ref(./warning.png); BSD 系は csh 系シェルが主流で,Linux などは bsh 系が主流だ.馴染むシェル方を自分で選んで,設定しておこう.

** (実習) [#kc48bd71]
- &ref(./notes.png); [[web 上の簡単な資料:http://www.cas.cmc.osaka-u.ac.jp/~paoon/Lectures/2006-7Semester-AppliedMath7/02.html#textfile_editor]]を見て,emacs, vi の両方をとりあえず使ってみよ. 
- &ref(./notes.png); .cshrc を編集して最低限レベルでよいので設定をしよう.具体的には,.cshrc をエディタで編集して,
-- setenv EDITOR の項目を好きなエディタに修正(例えば setenv EDITOR emacs など)
-- setenv PAGER を jless に修正(setenv PAGER jless とする)

などとなる.他にも沢山便利な設定があるので,上のWebなどを参照して調べてみよう.
- &ref(./notes.png); jman ee として ee のマニュアルを読んでみよ(ただし,jman は日本語のでる端末でないと日本語にならないよ).

* これまでやったインストール/設定の説明および確認等 [#v1bebb1b]

これまで駆け足でまずインストールと基本設定を行ったが,これについて解説を行う.

** プログラム,ファイル等のインストールについて [#t2cf21e2]

FreeBSD では,ソフトウェアのインストールには以下のようにおおよそ4種類の方法がある.

| インストール方法 | 説明 |h
| /usr/sbin/sysinstall → Configue → Distribution とする | 基本的なソフトウェアセットはこれを用いてインストールするのがよい. X が入っていない!なんて場合はこれを用いて追加するのがよいだろう. 依存関係もきちんと管理される.  ただし,[[FreeBSD Foundation:http://www.jp.freebsd.org/www.FreeBSD.org/ja/]] によって管理されたものしかインストールリストに入っていない.  |
| Package を用いる. 具体的には sysinstall → Configure → Packages としても良いし,バイナリを直接持ってきてから pkg_add コマンドを用いてもよい((ただしこの場合は依存関係は自動的に解決されないはず)). | Package というのは,「コンパイル済みバイナリ」を持ってきてインストールする仕組みないしはそのバイナリ等のことである. 実質的に単なるコピー作業であるので,作業時間は短くて済み,楽である. ただし,コンパイル環境やコンパイルオプション設定が変えられないので,細かい設定を要する場合には不向きである.   |
| ports((実は,ports はソースからコンパイルするための「情報」を集めただけのものである.コンパイルした結果は内部的には Package として扱われてインストールされる.よって,ports からでも Package からでもソフトのインストール後は Package として扱われる. )) を使う. 具体的には,/usr/ports 以下などにある「目当てのソフトウェアの名前のついているディレクトリ名」を調べておいた上で,portinstall を用いればよい.portinstall を使わない場合は,そのディレクトリに cd で行き,Makefile を読んで設定を調整した上で make configure → make → make install とコマンドを打つのがかつての典型的な作業である.  | これは「プログラムをコンパイルするのに必要最低限な情報」が集められていて,コンパイルするときにプログラムソースをネットワーク経由で取ってきて自前でコンパイルする仕組みである.必要最低限の情報しかないのでディスクスペースを取らないし,コンパイルに当たって細かい設定が出来るのが利点である.ソースからコンパイルするのでそのソフトウェアの最新版が利用可能なところも利点だ.慣れてきたら Package よりも Ports を使うようにしたい. ports が入っていない場合,sysinstall → Configure → Distributions で ports を選べばインストールできるはずである. また,ports 情報の更新は portsnap で行えることも既に学習済みだ.|
| ソースを自分でコンパイルする. | かつてはこの方法しかなかった最も原理的なインストール方法である. 今でも無名なソフトウェアや自作ソフトウェアにはこの方法しかないので, 結局できるようにならねばならない.   詳細については [[2006年の応用数理7の授業の該当部分:http://www.cas.cmc.osaka-u.ac.jp/~paoon/Lectures/2006-7Semester-AppliedMath7/11.html]]((linux を使っているが基本は一緒.)) でも読んで欲しい. |

&ref(./warning.png); インストール方法の使い分けの目安としては,「インストールに時間をかけられるか」「どれくらいセキュリティに影響がありそうか」
で判断するとよいだろう.理想的には,全て ports からで,あとはかかる時間との兼ね合いというところか.

** (実習) [#p16d57ae]
- &ref(./notes.png); ports コレクションが /usr/ports 以下にあることを確認しよう.
- &ref(./notes.png); ports コレクションの中から目当てのソフトウェアを探す方法を知っておこう.
-- 一番簡単なのは,psearch というツールがあるので,これを使うのがよい.
そこで,portinstall を用いてインストールしておこう.
肝心の psearch が /usr/ports 以下のどこにあるかは,今回のみ次の文章の方法を用いよう.
-- psearch 以外には,例えば探したいソフトウェア名が ABC だとして
 (cd /usr/ports; make search name="ABC" )
とする方法なども考えられる. 他にもいろいろ考えられるので余力のある者は考えてみよう. 
例えば
  #!/bin/csh -f
  grep '^[^|]*'"$1" /usr/ports/INDEX-7 | awk -F\| '{print $1,":",$2,":",$(NF-1)}' | sort
と書いた "ports-find" というシェルスクリプトを作って "ports-find ABD" などとしてもよいだろう.

- &ref(./notes.png); 既にインストールされているソフトウェアについて知るには,(基本的に全て Package 扱いなので) pkg_info というコマンドを使う.これに少し慣れよう.
具体的には,
  pkg_info 
とすると単なるリストが,
  pkg_info -a
とすると関連する情報が全て出てくる. 
// ただしこれだと見にくいので,例えばシェル(csh の場合)で
//  alias pkg_list "pkg_info -a | grep 'Information for' | sed 's/Information for //'"
//などと設定しておけば,
//  pkg_list
//というコマンドで ports/Package によってインストールされているソフトウェアのリストが出てくる.

- &ref(./notes.png); "fd" というソフトウェアを ports を使ってインストールしてみよう. 
具体的には,fd が入っている/usr/ports のディレクトリ(上の方法で探せ)を調べておいて,portinstall を用いればよい.
その後,fd コマンドで fd が起動すること("q" で exit できる), man fd, jman fd として各々マニュアルが読めることを確認しておこう. 

なお,fd のインストール時に
 Read the document files in /usr/local/share/doc/fd, 
 and use the example fd2rc files in /usr/local/etc.
などという注意書きが出力される. こうしたさりげない説明は見逃しがちなので気をつけよう(一回しか出ないことが多い)
なお,portinstall でインストールした場合のログが /var/log/ports に残っているはずなので,これを読めばよい((だからログは重要なのだ)).

ちなみに,fd の設定等については日本語マニュアルを読めば良く分かる(or 推測できる)が,基本的には /usr/local/etc/fd2rc がシステム共通の設定ファイル,~/.fd2rc が個人用設定ファイルである.

- &ref(./notes.png); さらに余力のある者は,同様に "rogue" を ports からインストールしてみよ(多分 rogue_s がよいだろう).

** ディスク管理について [#l8a5adcd]
(主にハード)ディスクをどう扱うかについては,
: fdisk | ハードディスクのどの部分をどの OS が使うか切り分ける.
: disklabel | FreeBSD 用に確保した部分をどう使うかさらに切り分ける.
: newfs | 上で細かく切り分けた部分(パーティション)に用途に応じたファイルシステムを作り込む
: mount | 上で細かく切り分けた部分をどのディレクトリに割り当てるか /etc/fstab などの情報から決める

というコマンドを駆使する必要がある. 
FreeBSD インストール時にはこれらの準備は対話的に行れ,コマンドは sysinstall が実行してくれるが,「新しく買ってきたハードディスクを増設したい」などの場合はこれらのコマンドを意識した方がよいだろう.

*** (実習) [#oc856d0b]
- &ref(./notes.png); 
 less /etc/fstab 
としてみて,ハードディスクのどの部分がどのディレクトリに割り当てられているか見てみよう(詳しくは jman fstab としてマニュアルを読もう).
おそらく,多くの場合は /dev/ad0s1* が 切り分けられてマウントされているだろう(この場合,/dev/ad0s1 は今利用しているハードディスクを指している).

また,さらに
 df
としてみよ.
また,jman mount, jman umount としてハードディスクのディレクトリへの割り当てを変えるにはどうしたらよいか推測せよ(この辺りは口頭で説明する)((よく分からないうちは mount コマンドも umount コマンドも実行しないこと!!)).
//
- &ref(./notes.png); CD の中身を直接読んでみよう.
例えば,配布された CD などを CD ドライブにいれてから,スーパーユーザで
  mount -t cd9660 /dev/acd0 /mnt
として CD ドライブを /mnt というディレクトリに「マウント」してみよう.
その後に
  ls /mnt 
などとすると,CD の中身が読めることが分かるだろう.
なお,こうしてマウントした storage は「アンマウント」(ソフトウェア的な切り離し)してからでないと,ハードウェア的に切り離せない(つまり,CD を取り出せない).
CD の中身が読めることが納得できたら,
  umount /mnt
として,アンマウントしよう.そして,CD が取り出せることを確認しよう.

** ネットワーク設定 [#j58e2b2b]
ネットワークの設定を見たり,変えたりするには本来は各設定ファイルを閲覧/編集する必要がある.
これまでにも作業してきたが,あらためて説明しよう.

まず,ネットワークの情報は
  ifconfig -a 
とすると得られる.

そして,これらの設定は /etc/rc.conf を編集することで書き換えられる.

また,これらは
sysinstall → Configure → Networking → Interface → (使うネットワークカード: たいてい一番上)
としてから設定することで対話的にも閲覧/設定でき,たぶんこちらが楽だろう((ただし,/etc/rc.conf は自動的に「追記」され修正されないので sysinstall で設定する度に汚くなる.適当な時期に人間がエディタで綺麗にした方がよいだろう. ちなみに /etc/rc.conf の記述は下の方ほど優先順位が高い.)). 

細かい各設定内容について以下,ざっと述べよう.

*** IPv6 ? [#vb676d46]
IP version 6 を用いるかどうかの設定. われわれが通常用いている IP は version 4 である. 2009年現在では,まだ IPv6 でなければならない,というネットワークは多くないだろう. 通常は No で構わない.

*** DHCP ? [#y082b87d]
Dynamic Host Configuration Protocol の略で,そのマシンのネットワーク設定情報をネットワーク自身から貰うか? という設定.
これはそのネットワークの管理者の設定/ポリシーに依存するので,管理者に尋ねておかないといけない((例えば,VMwarePlayer では NAT + DHCP 設定にするのが楽だろう,など.)).
計算機室では No である.
有効にした場合は,/etc/rc.conf に
  ifconfig_(ネットワークカード名)="DHCP"
と記述される.

*** Host name [#pce5316a]
ネットワーク上でそのマシンが名乗る名前. テキスト形式であり,人間向けの情報である.
DHCP 有効の場合は設定不要なことが多い.
計算機室での設定については先週の資料を参照のこと.
主に /etc/rc.conf で
  hostname="..."
と書かれて設定される(書かれている部分の最初のドットまで).

*** Domain [#reba474f]
そのマシンが属するネットワークそのものの名前. 
家で言えば住所のようなもの.
DHCP 有効の場合は設定不要なことが多い.
計算機室での設定については先週の資料を参照のこと.
主に /etc/rc.conf で
  hostname="..."
と書かれて設定される(書かれている部分の最初のドット以降).

*** Gateway [#t40e7744]
属するネットワークの外への出口(中継場所).
通常は IP で記す.
DHCP 有効の場合は設定不要.
計算機室での設定については先週の資料を参照のこと.
主に /etc/rc.conf で
  defaultrouter="..."
と書かれて設定される.

*** Name server [#d057162a]
ホスト名と IP Address の変換情報をどのサーバに尋ねればよいか,という情報.
これが無いと他のマシンへのホスト名でのアクセスができない((逆に言えば,IP Address が分かっていれば Name server へ聞かなくてもアクセスできる. 不便だが.)).
DHCP 有効の場合は設定不要.
計算機室での設定については先週の資料を参照のこと.
主に /etc/resolv.conf で
  nameserver ...
と書かれて設定される.

*** IP Address [#zf39d8ed]
マシンがネットワーク上で持つ番号. 数字で表され,機械向けの情報.
ネットワークの相互の実際のアクセスは IP Address を使ってされるため,少なくとも属するネットワーク上では IP Address は唯一でないといけない.
DHCP 有効の場合は設定不要.
計算機室での設定については先週の資料を参照のこと.
主に /etc/rc.conf で
  ifconfig_(ネットワークカード名)="inet ....  netmask ...."
と書かれた inet .... の部分で設定される.


*** Netmask [#u252900c]
自分の IP を記したときに,どこまでがネットワークの持つ番号で,どこからが自分のマシンが(そのネットワークのなかで)持つ番号かを区別するために使う情報.
二進数表示したときに "1" になるところまでがネットワークの情報で "0" になるところがマシン別用の情報ということになっている.
"." で区切って10進数で表すか,0x を頭につけて 16進数で表す.
DHCP 有効の場合は設定不要.
計算機室での設定については先週の資料を参照のこと.
主に /etc/rc.conf で
  ifconfig_(ネットワークカード名)="inet ....  netmask ...."
と書かれた netmask .... の部分で設定される.

*** (実習) [#n6a48350]
- &ref(./notes.png); 上のネットワークの設定をファイル(/etc/rc.conf, /etc/resolv.conf)を読んで確かめよ.
- &ref(./notes.png); 実際に
  ifconfig -a
としてみて,ネットワークの設定と照合せよ.

** その他, ネットワークに関してインストール時に現れた細かい設定 [#p6decd97]

*** inetd ? [#fb953e70]
ネットワークサービスの総合受付である inetd (後で学習する)を準備しておくか? という設定である.
必要ならば /etc/rc.conf に
  inetd_enable = "YES"
と書けばよい. 

*** sshd ? [#dde43627]
データが暗号化されたログイン経路である ssh の受付をするか? という設定である.
これは有効にしておくのがよい.
/etc/rc.conf に
  sshd_enable = "YES" 
と書けばよい. 

*** NFS server ? NFS client ? [#rc96d90c]
ネットワーク経由でハードディスクを使えるようにするか? という設定である.
server は「ハードディスクを持っている側」,client は「それを利用する側」である.
NFS の仕組みは重要だが,そのソフトウェアはやや使いにくい. 使うには各々 /etc/rc.conf に
  nfs_server_enable = "YES" 
  nfs_client_enable = "YES" 
と書けばよい. 

*** Console キーボードの設定 [#mc80f9b7]
繋がっているキーボードをコンソールでつかう場合,キーボードを合わせておくとよい.
英語キーボードならば特に何もする必要はないが,日本語キーボードの場合は /etc/rc.conf に
  keymap="jp.106"
ないしは
  keymap="jp.106x"
と書いておく(後者は Ctrl キーと Caps キーの機能を交換して使う場合).

*** mouse の利用 [#n33f6b47]
マウスを使わない! という場合は少ないだろうからまあ設定しておくのがよいだろう.
/etc/rc.conf での設定は前回のものを参照しよう.

*** (実習) [#m768347e]
&ref(./notes.png); 上の設定が今現在どうなっているか,/etc/rc.conf を見て確かめよ.

** アカウント管理 [#kf7e0b28]
Unix系 OS ではユーザアカウントは以下のような情報で管理される.

: アカウント名,ログインid | テキストで構成されるアカウント名. 唯一である必要アリ.
: uid | そのアカウントを区別するための背番号的なもので単なる数字. システムの様々な権限があるかどうかは uid で区別される.ただし,ログインシステムやシェルはアカウント名でアカウントを区別する((つまり,同じ uid だがアカウント名が異なるアカウント(別名アカウント)を作成することが可能.使い方によってはとても便利だが,よく分かって無い人にとっては混乱のもとか.)) sysinstall, adduser コマンドなどでは自動的に候補が作成される.
: Group | そのアカウントが主に属するグループ名. システムの様々な権限はより正しくは uid と所属グループで区別されるので,どのグループに属するかは重要だが,「主に」属していなくてもよいので,実はここは適当でもよい. sysinstall, adduser コマンドなどでは自動的に候補が作成される.
: Password | ログイン時などに必要なパスワード. 後でユーザが
  passwd
として変更できる. 管理者は全アカウントのパスワードを自由に設定できる.
: Full name | フルネーム. 人間用情報なので,実は何を書いてもよい.
: Member group, Other group | 他に属しているグループ名. これは重要. あとで管理者になるべき人が使うアカウントはとりあえず wheel, operator としておくべし.  wheel に属していると管理者になる権限が,operator に属していると様々な特殊なコマンドを使う権限が手に入る.
: Home directory | そのアカウントユーザが固有で使えるディレクトリ. 通常は /home/アカウント名 とすることが多い. sysinstall, adduser コマンドなどでは自動的に候補が作成される.
: Login Shell | ログイン時から使うシェル. /etc/shells にリストアップされているものの中からしか選べないので注意((使いたいシェルが /etc/shells に書いてなければ root で書き込んでおくこと)). ただし,"nologin" は特別で,これを選ぶとログインできなくなるようになっている. 後でユーザが
  chsh -s /bin/tcsh
などとして変更できる.

さて,これらの情報の設定方法は主に以下の3通りである.
ただし,管理者(root,スーパーユーザ)でないと出来ない作業であることは言うまでもない.

| 方法 | 解説 |h
| adduser コマンドを使う(新規時) |  お気楽. 間違えたら Ctrl-C で止めればよいし,後で(後述のコマンドを使って)修正も効く.  ただし,「変更」には使えない.  |
| sysinstall → Configure → User Management とする方法 | より気楽. ただしこれも「修正」には使えない. |
| コマンドを使う | 最終的にはこれが必要. &br;&br; ''vipw'' … アカウント名,uid, 主グループid, フルネーム, ホームディレクトリの指定, ログインシェルを設定するコマンド. 具体的には,エディタ((どのエディタが呼ばれるかは環境変数 "EDITOR" の設定による. 設定してないと vi が出てくる))で /etc/passwd ファイルを「正しく」呼び出す.このコマンド以外の方法でこのファイルを編集することは意味がないので要注意だ.&br;&br; /etc/group ファイル… 普通にエディタで編集可. グループの作成,編集,アカウントの所属を自由に編集できる. &br;&br;あと,adduser や sysinstall を用いない場合はホームディレクトリが自動的に作られるわけではないことにも注意が必要だろう. |

*** アカウントチェンジ [#wf1b5af9]
権限があるならば,ログインした状態で他のユーザになりかわることができる.
例えば,スーパーユーザが "hogehoge" というユーザになりかわりたければ
  su hogehoge
とすればよい.
逆に,普通のユーザがスーパーユーザになりかわりたい場合は
 su
とすればよい(ただしスーパーユーザのパスワードを知らない場合と権限がない場合は拒絶される).

*** (実習) [#w94ad91c]
- &ref(./notes.png); 両隣りあたりの人,二人のアカウントを作成せよ. そして,まずは普通にコンソールからログインできることを確認せよ. 次に,その人にその人のマシンから ssh でログインして貰い,ログインできることを確認せよ. なお,ssh でのログインは  
  &ref(./notes.png); ssh 相手マシンでの自分のアカウント名@相手マシンのホスト名
  ssh 相手マシンでの自分のアカウント名@相手マシンのホスト名
とする.
- &ref(./notes.png); furihata というアカウントを作成せよ. このアカウントのパスワードは授業時に口頭で伝える.

* レポート [#w4557507]
本日行った作業について furihata あっと cmc.osaka-u.ac.jp にメールで報告せよ.
もちろん各自の
+ 所属(学部,学科)
+ 学籍番号
+ 学年
+ 氏名
+ 日時
+ 肝心のレポート内容(得た知見,作業について気づいたこと等)

を書くのを忘れないように.

* about Icons [#f88dc53d]
Some icons in this page are downloadable at [[ICONFINDER:http://www.iconfinder.net/]].
The "note" icon &ref(./notes.png); designed by [[Marco Martin:http://www.notmart.org/]] is distributed with the LGPL licence
and the "warning" icon &ref(./warning.png); designed by [[Alexandre Moore:http://nuovext.pwsp.net/]] with the GPL licence.
Thank you Marco and Alexandre!

// &ref(./notes.png);
// &ref(./warning.png);