Ubuntu

提供:yonewiki

言語と開発環境へ戻る。

概要

Linuxの系統を踏むOSです。Canonical(カノニカル) Ltd.、(昔は MRS Virtual Development Ltd.) はUbuntuの支援及び開発援助企業が関わっています。ときどきCanonicalという名前がOSをいじくっていると出てくることがあります。Pivotalという財産も関与しています。企業がUbuntuを利用することもサポートするグループがあるということで、なかなか有名なLinuxOSになりつつあります。管理人はUbuntu 12.04を導入。現在は14.xxというバージョンだそうな。なぜ12.04かというと、特に意味はない。しいて言えば成り行きです。オライリージャパンが出版している入門ソーシャルデータのサンプルがIPython Notebook現在のjupyter Notebookで提供されるということで、本に記載されているVirtualBoxの導入手順に従っていると、VirtualBoxの共有ディレクトリの機能を利用する部分での不具合が解消できず、中途半端に、成り行きでできあがったUbuntuに手動でインストールして、参考書に書いてある環境を構築するという、そんな感じです。


今現在、まだオライリージャパン出版の入門ソーシャルデータの中身を実際にサンプルを実行したりして理解するための環境は構築できていません。まぬけなこと。

ここまでの道のり

導入したのはUbuntu 64bit版 12.04のCUI環境。


1.VBoxGuestAdditionsがマウントされない問題を解決。

2.VBoxLinuxAdditions.runして更新。

3.sudo apt-get update で更新。

4.sudo apt-get updrede で更新。

5.以下アプリをインストール

  • apache
  • Perl
  • kernel-devel
  • yum
  • gcc
  • ruby ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux](ruby --version)
  • python Python 2.7.3 (python -V)
  • shef
  • knife-solo
  • jupyter
  • pip
  • ipython
  • pyenv
  • git
  • ubuntu-desktop 結局!いろいろめんどくさくなって、入れちゃいました。CUIで良かったんすけどね。ソーシャルデータの勉強だけだったら…これいれるんだったら他のもついでに入るべ。

6.キーボードを日本語設定に

7.言語を日本語設定に


操作

  • 起動
デスクトップ環境まで導入した場合は起動するとGUIのログイン画面が起動し、GUIのいわゆるデスクトップ画面が起動します。
以下のショートカットキーでCUIで操作する画面に遷移できます。戻れるっていうか、デスクトップGUIを終わらせるっていうかそんな感じのことが起こります。
  • Ctrl+Alt+F1
上記のショートカットキーの最後のF1の部分はF1でもF2でも、F? いくつか忘れたけど、結構な数のファンクションキーが同じ動きをします。
あるいは、
サイドバーにあるUbuntu Oneみたいな名前のボタン(デフォなら一番上にあると思われる、茶色の背景に白色の円盤みたいな柄です。)からterminalというアプリを検索して、そのterminalアイコンを起動することで、コマンド入力のためのウィンドウが起動します。

コマンド

rootのパスワード設定

rootさんはUnix OSの中では定番の偉いユーザの名前です。Ubuntuでは初期状態ではパスワード設定はされていなくて、rootさんの権限を授かることのできる権限を持ったユーザが規定になっているようです。インストールするときに指定するのは、このrootさんの代理のようなユーザです。パスワードを設定しなくても、rootさんと同じ権限を必要とするxxxxのようなコマンドにはsudo xxxxとすることでコマンドを実行できますし、特にrootさんのパスワードを設定していなくても、困ることもない場合もありますが、すべてのコマンドが実行できるわけでもなく、やっぱり最終的にはパスワードを設定するのが便利なようです。パスワードを設定するには、以下のようなコマンドを使います。

sudo passwd root
Enter new UNIX password: (パスワードを入力してEnter。実際には何も表示されませんがキー入力を蓄積しています。)
Retype new UNIX password:(確認のためさきほど入力した内容と同じ内容を入力してEnter。) 
コマンドの結果表示
passwd: password updated successfully

確認のパスワードの入力を間違えると、コマンドの結果表示は違うものになると思います。もう一回やり直すとうまくいくんじゃないでしょうか…。

コマンド利用におけるroot権限への移行

以下のようなコマンドを使うとroot権限に移行できます。

su
password:(設定したパスワードを入力してEnter。)

そうするとコマンドの入力待ちの最後の文字が#になります。以下のような感じ

通常:上記コマンド利用前
ユーザ名@PC名:~$ 

ルート権限を得た後 
root@PC名:/home/ユーザ名ディレクトリ#

通常のプロンプトの$の前にあるチルダ(~)もディレクトリパスを意味していて、ホームディレクトリを意味しています。rootさんのホームディレクトリもありますのでrootさんに切り替わるとチルダではなく、パスが表示されるというわけなのです。ちなみに /root がrootさんのホームディレクトリになっています。いずれもデフォ(規定値)の場合です。

ディレクトリ操作

ホームディレクトリを起点としてコマンドライン画面のターミナルが開く仕組みです。ホームディレクトリというのやユーザ毎に異なる設定になっているのですが、Ubuntuでは/home/(ユーザ名)というディレクトリが、ホームディレクトリになっていてrootは、/rootになっています。ディレクトリの参照権限の設定とかはWindowsの方がやや複雑というか、柔軟に設定できるというか、そんな印象です。UbuntuのようなUnixの系統を踏むLinux系のOSではディレクトリ毎にユーザ権限とグループ権限とその他権限の3種類について、読み込み/書き込み/実行の権限を設定して制御するのが一般的です。ターミナルで今、どこのディレクトリにいるのかを確認するコマンドがありますので、そこから見ていきましょう。今、どこにいるといのは今どこのディレクトリを覗いているのというニュアンスですね。今覗いているディレクトリに対してできる操作方法というのが決まっていますし、今どこをみているのかというのは重要な概念です。ウィンドウズのエクスプローラを使ってディレクトリを見るときも、いまどこを覗いているかという概念があると思いますし、そのディレクトリに対してメニューから新しいディレクトリを作るという操作ができるようになっていたりしますよね。そんなわけで、今、覗いているディレクトリ、専門用語ではカレントディレクトリと言ったりしますが、それを確認するのがpwdというコマンドです。

pwd
コマンド結果
/home/user_id/

という感じですね。ディレクトリの移動にはcdというコマンドと移動先を引数にしたような設定値を使って移動します。例えばユーザ毎に割り当てられているホームディレクトリは ~ が設定値になっています。一つ上は ..という記号で、現在のディレクトリは . という記号によって表現されています。以下のようなコマンドがディレクトリ移動の例となります。例ではユーザのホームディレクトリが /home/user_id/ となっている前提になっています。

pwd
コマンド結果
/home/user_id/

cd ..
pwd
コマンド結果 一つ上のディレクトリに移動したのを確認。
/home

cd user_id
pwd
コマンド結果 /homeから/home/user_id/に移動したのを確認。
/home/user_id/

cd /home
pwd
コマンド結果 /home ディレクトリに移動したのを確認。
/home

cd
pwd
コマンド結果 引数を設定しないとホームディレクトリに移動します。
/home/user_id

cd /etc
pwd
コマンド結果 いきなり特定のディレクトリにも移動できます。当然ですが…
/etc/

cd ~/public
pwd
コマンド結果 ~というホームディレクトリを示す記号と組み合わせてのディレクトリ移動もできます。
/home/user_id/public

と、たくさん例を出しましたが、こんな感じですね。エクスプローラでフォルダをポチポチするのも乙なもんでしたが、こういう方法も覚えていくのがコマンドラインを使いこなすための作法です。興味ない人はこれ以上、読み進める必要もないでしょうね。コマンドラインなんか覚えたくないという人は、それまでです。コマンドラインでしかやれないことはありますので、パソコンの使い方をこれ以上は拡張できないということを意味します。もちろんコマンドラインを使わなくても生きていけるし、パソコン自体を使わなくても生きていける。ただやれることが違うだけのことです。大した差ではありません。ギターが弾けなくても生きていけるし、フィギアスケートができなくても生きていける。山登りをしなくても生きていけるし、海で泳がなくても、生きていける。スキューバダイビングをしなくても生きていけるし、スカイダイビングをしなくても生きていける。飛行機に乗らなくても海外にはいける。パスポートがなくても生きていける。旅行をしなくても…ってもういいですかね。やれることを増やすと世界が変わると思う人もいれば、そうでない人もいる。そういうことなんだろう。

ファイルの編集

/etc/rc.local というファイルにOS起動時に実行するコマンドを記述できます。いわゆるシェルスクリプトってやつを書く感じです。

例えば/home/vagrantっていうvagrantという名前のユーザのホームディレクトリ(コマンドを起動したときにそのユーザのログインしたときやターミナルの起動時の基点となるディレクトリ)にstart_jupyter.shというシェルスクリプトを作っておいた場合は、rc.localには以下のような方法でシェルスクリプトを追加します。

sudo vi /etc/rc.local

とするとviエディタが起動します。viエディタを知らない人はファイルの中身が出てきても一筋縄には編集できないと思います。なぜならファイルの中身が開いた時点ではキーボードで文字を打ち込んでも文字が入力されるわけではないからです。どうすればいいか、viエディタは以下のような操作を最低限覚えないと利用できません。

  • カーソル位置の変更は 矢印 キーで ご自由に!
  • カーソル位置の文字を消すには x キーで!
  • カーソル位置から文字入力開始をするには i キーを押す!
  • カーソル位置の次から文字入力を追記するには a キーを押す!

ただし! i キーや a キーを押した後は文字が入力できるモードになっています。この状態を編集状態と呼びましょうか?それで、このモードから出るには esc キーです。esc キーを押した後の状態をここでは制御状態と呼ぶことにしましょう。


  • 編集状態から制御状態に遷移するには esc キーを押す!


このモードでないと 矢印 キーでカーソルを移動したり、 x キーで文字を消すこともできません。あしからず。

あとは保存と編集の終了ができないと、どうにもなんないっすね。

  • 編集した内容を無視して、viエディタをから抜けるには : を入力した後に q! に続けて [Enter] と入力すると強制終了。

上記の手順で:を入力した時点でカーソルがファイルの最後尾に移動して:が最終行に入力された状態で待ち状態になります。

  • 編集した内容を保存して、viエディタをから抜けるには : を入力した後に wq に続けて [Enter] と入力すると保存して終了できます。


これだけ覚えれば最低限の操作はできるようになったと思います。より便利の作業するためにはもっと色々な便利なキー入力とその意味を覚えなければならないでしょう。


「viエディタとかっていうけど、なんかスッゲメンドクサクね?」という人はいると思います。でもよく思い出してみてください。この上記の一連の操作で一度でもマウスを使いましたか?使っていないですよね。そういうことです。マウスを使わずにファイルを保存したり、ファイルの編集を始めたりするにはそれなりの工夫が必要なわけです。いくつかのコマンド制御ができないとGUIのテキストエディタでマウスで操作するような作業と同じことはできません。慣れている人はviエディタのようにマウスを一切使わずにテキスト編集ができた方が楽だと言います。ずっと手をキーボードから動かすことなく、作業ができるからでしょうかね。

Apacheのインストール

  • インストール
sudo apt-get apache2

Apacheの起動・停止・再起動・状態確認・サーバ起動時に動かなくする(サービスの停止)・起動時に動くようにする(サービスの開始)

wwwサーバのapache2を動かしたり、止めたりは、以下のようなコマンドを発行することで制御します。あると思うな、GUI(ウィンドウ形式のユーザインタフェース)…。(←俳句調)

  • 起動
sudo /etc/init.d/apache2 start 
  • 停止
sudo /etc/init.d/apache2 stop
  • 再起動
sudo /etc/init.d/apache2 restart


  • サーバ起動時に動くようにする(サービスの起動)
sudo service apache2 start 
  • サーバ起動時に動かないようにする(サービスの停止)
sudo survice apache2 stop


  • 状態の確認

簡単にはこんな感じ

sudo /etc/init.d/apache2 status
コマンド結果
Apache2 is running (pid xxxx).

より詳細な状態確認の初期設定として、サービスを停止した状態(sudo survice apache2 stop)にして

sudo apt-get install lynx

として、lynxをインストールする。 すると、再度サービスを起動(sudo survice apache2 start)してから、以下のコマンドで確認ができる。

sudo apache2ctl status
コマンドの結果
                      Apache Server Status for localhost

  Server Version: Apache/2.2.22 (Ubuntu) mod_ssl/2.2.22 OpenSSL/1.0.1
  Server Built: Jul 15 2016 15:32:45
    __________________________________________________________________

  Current Time: Xxxday, XX-Xxx-2017 XX:XX:XX JST
  Restart Time: Xxxday, XX-Xxx-2017 XX:XX:XX JST
  Parent Server Generation: 0
  Server uptime: XXXXXX seconds
  Total accesses: 0 - Total Traffic: 0 kB
  CPU Usage: u0 s0 cu0 cs0
  0 requests/sec - 0 B/second -
  1 requests currently being processed, XX idle workers

_____W___________________.......................................
_________________________.......................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................

  Scoreboard Key:
  "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
  "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
  "C" Closing connection, "L" Logging, "G" Gracefully finishing,
  "I" Idle cleanup of worker, "." Open slot with no current process

その他の確認としては

sudo service apache2 status
コマンド結果
Apache2 is running (pid xxxx).

apache2 -v
コマンド結果
Server version: Apache/2.2.22 (Ubuntu)
Server built:   Jul 15 2016 15:32:45

というようなものもあります。

証明書の設定

以下のようなコマンドでca.crt認証局とserver.crt証明書を作ってみました。最後に証明書をインターネットエクスプローラで読み込ませるために、証明書の*.crtを共有ディレクトリにコピーしています。よく出回っているsnakeoilファイルからでは現在のIEやEdgeあるいはFireFox、Chromeの証明書エラーを消すことはできません。

/home/xxx# cd usr/lib/ssl
/usr/lib/ssl# mount -t vboxsf cookbooks /mnt/cookbooks #VirtualBoxの共有ディレクトリマウント設定。
/usr/lib/ssl# openssl genrsa 2048 > ca.key
Generating RSA private key, 2048 bit long modulus
.......................................+++
...+++
e is 65537 (0x10001)
/usr/lib/ssl# openssl req -new -key ca.key -subj "/C=JP/ST=Tokyo-To/L=Tokyo-city/O=yo-netrollxx/OU=IT dept./CN=yo-netrollxxCA" > ca.csr
/usr/lib/ssl# openssl x509 -days 3650 -req -signkey ca.key < ca.csr > ca.crt
Signature ok
subject=/C=JP/ST=Tokyo-To/L=Tokyo-city/O=yo-netrollxx/OU=IT dept./CN=yo-netrollxxCA
Getting Private key 
/usr/lib/ssl# openssl genrsa 2048 > server.key
Generating RSA private key, 2048 bit long modulus
..............+++
.................................................................................+++
e is 65537 (0x10001) 
/usr/lib/ssl# openssl req -new -key server.key -subj "/C=JP/ST=Tokyo-To/L=Tokyo-city/O=yo-netrollxx/OU=IT dept./CN=192.xxx.xxx.xxx" > server.csr 
/usr/lib/ssl# openssl ca -days 3650 -cert ca.crt -keyfile ca.key -in server.csr > server.crt
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Apr 17 14:47:37 2017 GMT
            Not After : Apr 15 14:47:37 2027 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo-To
            organizationName          = yo-netrollxx
            organizationalUnitName    = IT dept.
            commonName                = 192.xxx.xxx.xxx
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
            X509v3 Authority Key Identifier: 
                DirName:/C=JP/ST=Tokyo-To/L=Tokyo-city/O=yo-netrollxx/OU=IT dept./CN=yo-netrollxxCA
                serial:XX:XX:XX:XX:XX:XX:XX:XX

Certificate is to be certified until Apr 15 14:47:37 2027 GMT (3650 days)
Sign the certificate? [y/n]:y

 
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
/usr/lib/ssl#cp *.crt /mnt/cookbooks/

これでダウンロードした*.crtファイルをインターネットエクスプローラやブラウザから証明書の読み込み作業を実施します。ブラウザによって読み込みかたが異なりますがIEの場合はメニュー「オプション」->「インターネットオプション」->「コンテンツ」タブ->「証明書」ボタンから表示されるダイアログでインポートボタンを押して表示されるウィザードで読み込みます。これで証明書のエラーは消えます。ただし第三者機関が証明する証明書ではないため、アドレスバーの色は変わらないままの認証なので、証明書エラーを消すためだけの証明書です。こういうのを自己証明書っていうみたいです。会社とかだと危険なのでちゃんとした奴を使う方がいいんでしょうね。予算の関係で自己証明書で運用することもあるんでしょうけれど、ほんとうに暗号化の正当性を証明するための証明書が必要となりそうな、そんな情報を管理するWebサーバなら逐一Key情報が一致しているか確認しなければならないとかの運用が必要でしょうね。自己証明書で証明エラーをすっ飛ばしている以上は生成した鍵番号を確認する運用をすべきということです。わからない人はサーバ運用しちゃだめかもね。


 都道府県 市 組織名とかは各自で好きなものを使って下さい。そのまま真似するのは無意味です。VitualBoxを使ってない人はその部分を無視して下さい。

python3.xのインストール

python2.xとかpyenvのインストールをしている状態から以下のコマンドで、インストールできます。流れとしては、最新版の確認→追加でインストールすべきモジュールのインストール→確認したバージョンのインストール、という順序になります。


pyenv install --list
(数字だけのもので最大のが最新っすね。文字がついてるのはpythonを含む違うアプリだったりします。)
…
sudo apt-get install libbz2-dev
例えば3.6.1だったら…
sudo pyenv install 3.6.1


python2.x系とpython3.xを使い分ける人は結構いるみたいです。ちなみにインストールしただけでは、python2.xをインストールしているUbuntuにpython3.xをインストールしても3.xの機能はスグに使えません。切り替え作業が必要です。逆も同じです。使い分けるためのコマンドで制御する必要があります。pythonを利用する巨大なアプリとかがいくつかありますが、3.x対応版と2.x対応版があるので、そういったものを使うときも切り替えが必要ですし、両方のバージョンに対応しているような個々のアプリでは、それぞれのバージョンに合わせた設定を事前に追加しておく必要があります。

python2.x用のanacondaインストール

python3.xを先にインストールした場合は以下により2.7のセットがインストールできるそうです。

sudo conda create -n (2.7用anacoda登録名=py27conda) python=2.7 anaconda
つまりは
sudo conda create -n py27conda python=2.7 anaconda

python2.7の有効・無効の切り替えは

source activate py27conda    #有効化
source deactivate            #無効化

です。


バージョンの確認は、

python --version
コマンド結果
Python 2.7.13 :: Anaconda 4.3.1 (64-bit)  #python2.x
Python 3.6.1 :: Anaconda 4.3.1 (64-bit)   #Python3.x


 

言語と開発環境へ戻る。