未分類

はじめに

前回はvscodeのメニュー表示バグの回避+αを記事にしました。

今回はようやくdjangoです。

git導入

まずは開発の基本gitです。バージョン管理すると失敗してもいつでも元に戻せます。というわけでgitをインストールします。

sudo apt install git

vscode上で環境構築

フォルダ作成

まずはvscodeを起動します。[フォルダを開く]から、~/python/を開き、右上のボタンからdjango_appsフォルダを作成して開きます。

gitリポジトリの作成

フォルダが開いたら次はメニューからターミナルを開きます。

開いたターミナルでgitリポジトリをその場に作ります。

git init

Python環境の作成とgit無視ファイルの設定

出来たら次にpythonの環境をその場に作ります。

python3 -m venv env

すると何やら左側に怪しい数字が出てきます。数字の出てるボタンをクリックします。

見てみると、さっきのpython環境を作成したときに出来たファイルのようです。つまり環境作成したときに346個のファイルが変更(追加)されたよと言っています。これはvscodeがデフォルトで持っているgitの機能で、さきほど作ったリポジトリを認識していて、その変更を検出したために変更ファイル数を教えてくれてたのです。ただ、自動生成されるファイルや外部から取得するファイルはgit管理対象にしないのがお約束なので、ここでは無視ファイルに指定します。いきなり346個も指定するのは辛いので、右上の階段状のボタンを押します。

これでフォルダ階層表示になるので、変更部分が分かりやすくなります。envを右クリックして、

[.gitignoreに追加]を選択します。これは、選択したフォルダ以下全てをgit管理対象にしない=無視するという意味です。

無視にすると、変更として検出されなくなり、無視設定ファイルである.gitignoreが作成されました。このファイルを開くと

346個のファイルが全て一覧されてしまっているので、

最上位フォルダのみに修正しておきます。 (以降このフォルダに追加された場合も自動で無視したいので)

これで心置きなくpython環境を設定できます。

vscode用python環境選択

次はvscodeにpython環境を認識させます。F1キーを押して、python: Select Interpreterと打ち込んでEnterしてください。

さっき作成したpython環境が./env/bin/pythonにあるので、それを選びます。

これでvscodeがこのフォルダで使用するpython環境が設定されました。

pipを使ったインストール

後はvscodeのメニューのターミナルから新しいターミナルを開きます。env環境で立ち上がるので、ここでpipでパッケージを更新しておきます。

pip install -U pip
pip list -o
pip install -U setuptools

これで更新が必要なpythonモジュールがなくなるので、djangoをインストールします。

pip install django

djangoのプロジェクト作成と確認

まずはsample_siteプロジェクトをカレントディレクトリに作成します。

django-admin startproject sample_site .

これでサービスが稼働可能な状態になるので、djangoの開発サーバーを起動してみます。

python manage.py runserver

プロンプトが戻らずに出力が止まり、http://127.0.0.1:8000/などと出てきていたら起動成功です。firefoxを立ち上げて、http://127.0.0.1:8000/を開いてみましょう。

まだ何もプログラミングもしてないのに、画面が出ましたね。これがフレームワークの力です。骨組みはすでにあるので肉付けしてくれという状態なのです。でもこれは確認用の画面なので、この画面を編集することはありません。

アプリケーション作成

まずはCtrl+Cで開発用サーバーを止めて、sample_appを作成します。

python manage.py startapp sample_app

ここまでで骨組みが出来ています。

pipのrequirements.txt作成

今、pythonの環境は全てgitからは無視ファイルとして扱っているため、保存されません。そのため、pythonの環境はいつでも復元できるようにインストールしたパッケージのリストをバージョン付きで保存します。それがrequirements.txtです。以下のコマンドで作成します。

pip freeze > requirements.txt

sqlite3データの無視ファイル追加

データベースのデータはgitには入れないので、このファイルも無視します。db.sqlite3を右クリックして[.gitignoreに追加]してください。あとは、pythonバイトコードのキャッシュ(.pyc)も無視ファイルに追加します。最終的に.gitignoreは↓な感じになります。

env/
db.sqlite3
*.pyc

gitリポジトリにコミット

切りが良いので、リポジトリにコミットしておきます。まずは数字の出ているところアイコンを押して、変更と書いてあるバーの右側の+を押します。

すると、[変更]の上に[ステージング済みの変更]という項目が出来上がり、元々検出されていた変更ファイル群が[ステージング済みの変更]に移動しました。後はコミットするだけなのですが、初回はその前にやることがあります。確認の意味でメッセージに「初回コミット」と入れて、一度チェックボタンを押して見ると…

こんな感じで怒られます。gitは原則コミットした人の名前とメールアドレスをちゃんと記述する慣習で、その設定がされていないとエラーになります。

初回だけなので、vscode内のターミナルからサクっと登録しておきます。

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

※メールアドレスと名前は自分の物に変えてください

これでコミットできるようになったので、チェックボタンを押してコミットしてみてください。成功すれば何も出ずに16個の変更ファイルがなくなります。ターミナルからgit logとすると、履歴を見ることが出来ます。

(env) user@ubuntu1804:~/python/django_apps$ git log
commit de2a5a426e41514b9281ee3250d19560f92e632a (HEAD -> master)
Author: first_user <first_user@elephantcat.work>
Date:   Sat Feb 8 01:28:39 2020 +0900

    初回コミット
(env) user@ubuntu1804:~/python/django_apps$ 

Hello,Worldの作成

まずはViewから作成します。見たまんまなHello,Worldを返すビューです。

from django.http import HttpResponse

def index(request):
    return HttpResponse("<html><body>こんにちは!世界</body></html>")

このアプリのURLとビューの対応表です。

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

このサイトのURLとアプリの対応表です。

"""sample_site URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('sample_app/', include('sample_app.urls')),
    path('admin/', admin.site.urls),
]

では、開発サーバー起動

python manage.py runserver

firefoxで確認

OK!なので、ステージングしてコミットします。

一応GitListに置いておきました。

まとめ

djangoでHello,Worldまでをgitにコミットしながらローカルvscode環境で実行させるところまでできた。

次回(↓)はアプリケーションとしての何かの機能を実装して、デバッグまでしてみたい。

未分類

はじめに

前回は、Ubuntuにvscodeをインストールして、pythonの開発環境を立ち上げてみました。

今回は、その環境でdjangoというpython用のWebフレームワークを使って、Webアプリを作ってみたいと思っていましたが、閑話休題。一旦少しUbuntuのデスクトップ環境を少し整えます。今まで説明した設定だけではあまりに使いにくいので…

デスクトップテーマの変更

見た目なんてどうでもいいのですが、Ubuntu18.04でvscodeを使うと、メニューが表示されないバグがあるので、その回避策でテーマを変更します。

gnome-tweaksのインストール

デスクトップ版なのにデフォルトではテーマすら変更できないのが最近のUbuntuです。まずはgnome-tweaksをインストールします。

sudo apt install gnome-tweaks

インストールが終わったら、Windowsキー→tweaks[Enter]でtweaksを起動します。

この画面でテーマの変更が可能です。

Yaruのインストール

vscodeの問題回避に有効と言われているのは、18.10で配布されたテーマ(Yaru)なのですが、これは18.04でもパッケージが追加されています。ただし、追加されたパッケージはsnap用なので、snapでインストールします。(aptにもppaという私用のパッケージ配布リポジトリがありましたが、もううまく動かないとのことなので今はsnapしかありません)。

sudo snap install communitheme

インストールが終わったら再起動します(ログアウトでもいいかもしれませんが念の為) 。再起動したらログイン前に、下図のようにセッションを「Ubuntu」から「Ubuntu with communitheme snap」に変更してから、ログインします。

一度変更すれば、次回は同じものがデフォルト選択されます。ログイン完了したら、Tweaksを起動して、 テーマのうちアプリケーション、カーソル、アイコンの3つをCommunithemeに変更すれば完了です。

メニューが白背景になるので、vscodeで現象が発生しなくなります(ごめんなさい。しばらく効果あったのですが、最終的には発生しました。一度発生したら結構頻度上がりました)。アイコンなどの形もやや変わり、少し新しい感じになります。

スクリーンロックの設定

Ubuntuのスクリーンロックがとにかく時間が短いです。VirtualBox内などの環境でスクリーンロックが必要なケースは稀だと思うので、これはOFFにしてしまいます。右上のメニューから設定ボタンを押すと…

こんな画面が出るので、ココの画面ロックを押します。すると…

またダイアログが出てくるので、自動画面ロックをOFFにします。

ついでに電源管理の省電力ブランクスクリーンもOFFにしておきます。

リソースモニタの常時表示

GUIで使う場合は特に時間よりも何よりも、固まってるのか動いてるのか分からない場合があるので、システム負荷が知りたいことが多いです。そのため、上部バーなどに常駐するリソースモニタを入れておきます。

sudo apt install gnome-shell-extension-system-monitor

入れ終わったら一旦ログアウトして再ログインした後、tweaksを起動します。とりあえず曜日よりも日付が欲しい派なので、日付をONします。

拡張機能にあるシステムモニタをONにして、設定ボタンを押します。

CPU~Diskまで全てDisplayします。GPUも必要なら出来ますが、あんまり信用できないかもしれないので、私は使ってません(Windows側で見てる)。

設定完了すると、トップバーはこんな感じになります。

まとめ

これで大体Ubuntu GUIで何をするにも最低限必要な環境にはなったかと思います。GUIなので、リソース消費が激しいですけども。。。
次回(↓)こそUbuntu+vscode+djangoが出来ればいいと思います。

未分類

はじめに

前回は、WindowsのDBeaverからVirtualBoxのUbuntuに入れたPostgreSQLにアクセスして簡単な表を見てみました。

今回は、一旦DBから離れてUbuntu 18.04上にVisual Studio codeをインストールして、Pythonの開発環境を整えてみます。

Visual Studio codeのインストール

最初に断っておくと、私はLinux上のVisual Studio code(以下vscode)を常用していません。理由はWindowsのvscodeからremote-sshで使っているからです。ただ最初はローカルにvscodeをインストールして使います。参考資料は以下になります。

Running Visual Studio Code on Linux

snap/apt?

Ubuntuにvscodeをインストールする方法はsnapを使う方法とaptを使う方法の2種類あります。snapはUbuntuでしか利用されない特殊なパッケージで、コンテナを前提としたアプリのインストールをするため、従来のパッケージ管理と大きく違います。アプリに余計なオーバーヘッドは要らないので、今回はaptで行きます。

aptリポジトリの追加

wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
rm packages.microsoft.gpg

インストール

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code

これでコマンドラインからcodeと打つとvscodeが起動するようになりました。もちろんWindowsキーからcodeでも、アプリケーション表示からvscodeアイコンを選択しても起動します。

起動直後の画面はこんな感じかと思います。

VisualStudio codeのプラグイン追加

vscodeは豊富なプラグインが売りになっています。まずはプラグインの追加方法説明も兼ねて…

日本語化

してみます。vscodeの左側についているバーの一番下のアイコンが拡張機能です。ここを押すと…

各種拡張機能(プラグイン)の一覧が出てきます。一番上に検索ボックスがあるので、そこに Japanese と打ち込むと…

日本語に関連した拡張機能が一覧されます。では一番上にJapanese Language Pock fo…というのがあるのでこれのInstallボタンを押します。しばらくすると右下にポップアップが出てくるので、そこにある[Restart Now]ボタンを押すと…

日本語で起動してくれます。

vscodeには各種のプラグインがありますが、ここではこれだけにして、必要なときに入れていく方式を採ります。

Python開発環境の構築

vscodeで環境構築する前にpython自体の環境構築方法について説明を入れておきます。

python2とpython3

まずはpythonのバージョンについて…

pythonにはバージョン2系とバージョン3系があります。2系のスクリプトは3系で動かないことが多いです(文字列周りがかなり違う)。なのでpythonというとまずはバージョンを確認することが多いわけです。今回は18.04.3をクリーンインストールしたので2系は入っておらず、3系だけです。環境を構築する上で2系のことは考えないことにします。また3系でもバージョンはいくつかありますが、複数のバージョンを切り替えて使用することも考えないことにします。

pythonのパッケージ管理

最近のスクリプト言語は、使用するライブラリ(モジュール)などをパッケージ管理が出来るようになっています。インターネットから自由にダウンロードして、簡単に利用でき、また更新なども一発で出来るようになっています。pythonでもそのような機能がありますが、スクリプト言語のパッケージでよく問題になるのは、「インストールする場所」です。例えば複数のユーザーで共通で使いたいライブラリがあるとか、このアプリだけで使うライブラリなどがあった場合、同じ場所に突っ込むと、必要なバージョンが違うなどの不都合が発生したりします。

なので、この手のパッケージ管理はアプリケーションならアプリケーションの環境ごとに分けることが多いです。その環境を切り替えるコマンドがvenvです。

venvのインストール

このvenvはpython標準の機能なのですが、ubuntuは改悪してvenvを外しているので、最初にこれをインストールします。

sudo apt install python3-venv

venv環境の作成とactivate

次に環境をtestという名前で作成します。

python3 -m venv ~/.venv/test

最後に指定してる引数が環境を保存するディレクトリになります。そしてこのディレクトリの名前が環境の名前です。では早速作成した環境に切り替えてみます。

user@ubuntu1804:~$ . ~/.venv/test/bin/activate
(test) user@ubuntu1804:~$ 

環境を切り替えるとプロンプトが変わり、カッコ付きで環境の名前が入るようになります。この状態であれば、いくらパッケージをインストールしても他の環境に影響を与えることはありません。

パッケージの更新・追加

試しにpip自体のアップデートをしてみます。

(test) user@ubuntu1804:~$ pip install -U pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 958kB/s 
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1
Successfully installed pip-20.0.2
(test) user@ubuntu1804:~$

めちゃくちゃバージョンアップしました。他にアップデートできるものがないかどうか見てみます。

(test) user@ubuntu1804:~$ pip list -o
Package    Version Latest Type 
---------- ------- ------ -----
setuptools 39.0.1  45.1.0 wheel
(test) user@ubuntu1804:~$

setuptoolsもアップデートできるようなのでやっておきます。

(test) user@ubuntu1804:~$ pip install -U setuptools
Collecting setuptools
  Downloading setuptools-45.1.0-py3-none-any.whl (583 kB)
     |████████████████████████████████| 583 kB 6.5 MB/s 
Installing collected packages: setuptools
  Attempting uninstall: setuptools
    Found existing installation: setuptools 39.0.1
    Uninstalling setuptools-39.0.1:
      Successfully uninstalled setuptools-39.0.1
Successfully installed setuptools-45.1.0
(test) user@ubuntu1804:~$

では適当にbottleでもインストールしてみます。

(test) user@ubuntu1804:~$ pip install bottle
Collecting bottle
  Downloading bottle-0.12.18-py3-none-any.whl (89 kB)
     |████████████████████████████████| 89 kB 2.1 MB/s 
Installing collected packages: bottle
Successfully installed bottle-0.12.18
(test) user@ubuntu1804:~$

インストール済みのパッケージを一覧します。

(test) user@ubuntu1804:~$ pip list
Package       Version
------------- -------
bottle        0.12.18
pip           20.0.2 
pkg-resources 0.0.0  
setuptools    45.1.0 
(test) user@ubuntu1804:~$ 

これだけ分かればパッケージ管理は何とか出来ると思います。削除など必要であればググって調べてください。

venv環境のdeactivateと削除

次は今の環境を抜けて元の環境に戻します。

(test) user@ubuntu1804:~$ deactivate 
user@ubuntu1804:~$

環境自体の削除は最初に作ったディレクトリを消すだけです。

rm -rf ~/.venv/test

今回環境は~/.venvディレクトリの下に作りましたが、ココは私が好みで使ってるというだけなので、どこでも大丈夫です。ここまででvenvの使い方や雰囲気が分かったと思います。

vscodeで作業する

まずはターミナルからフォルダを作成します。

mkdir -p ~/python/sample

ようやくvscodeを使います。 vscodeの[フォルダを開く]ボタンを押して作ったフォルダを開きます。すると…

左側のペインにSAMPLEと書かれてる部分が現れました。同じ行の右側に並んでいるアイコン群の一番左に[新しいファイル]ボタンがあるので押して、sample.pyと入れます。

作成したファイルが開かれて、右下にPython用の拡張機能が推奨されてます。渡りに船なので[Install]です。

次はpylintのインストールを促されますが、まだpipが使えないので、ここでターミナルから環境を作っておきます。

python3 -m venv ~/python/sample/venv

すると…

賢いことにvscodeが環境を検出してコレ使うか?って聞いてくれています。当然[Yes]です。
環境も選択できたので、ついでにさっき聞かれていたpylintも[Install]しちゃいます。すると、画面下側にターミナルが出てきて、venv環境がactivateされた状態でbashが立ち上がり、自動でpylintがインストールされてます。到れり尽くせりですね。

では、このターミナルからrequestsパッケージをインストールしちゃいます。

(venv) user@ubuntu1804:~/python/sample$ pip install requests
Collecting requests
  Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)
    100% |████████████████████████████████| 61kB 5.2MB/s 
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 3.8MB/s 
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests)
  Downloading https://files.pythonhosted.org/packages/e8/74/6e4f91745020f967d09332bb2b8b9b10090957334692eb88ea4afe91b77f/urllib3-1.25.8-py2.py3-none-any.whl (125kB)
    100% |████████████████████████████████| 133kB 3.3MB/s 
Collecting idna<2.9,>=2.5 (from requests)
  Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 5.5MB/s 
Collecting certifi>=2017.4.17 (from requests)
  Downloading https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl (156kB)
    100% |████████████████████████████████| 163kB 4.2MB/s 
Installing collected packages: chardet, urllib3, idna, certifi, requests
Successfully installed certifi-2019.11.28 chardet-3.0.4 idna-2.8 requests-2.22.0 urllib3-1.25.8
(venv) user@ubuntu1804:~/python/sample$ 

画面的には↓な感じです。

さて、これで必要な環境が整ったので、コードを書いてみます。

import requests
print(requests.get('https://www.google.co.jp/').text)

Google日本のトップページを取得して、標準出力に書き出すスクリプトです。では、右上の実行ボタンを押して実行しちゃいます。

サクっと実行出来ました。次はデバッグしてみます。左側のアイコンの上から4つ目の虫っぽいのをクリックします。

ソースコード2行目の左側で左クリックし、2行目にブレークポイントを張っておきます。

2行目に赤丸を確認してから、[Pythonでデバッグする]を押します。

すると…

プログラムが動いてから2行目実行直前で止まりました。左側には変数も表示されており、デバッグが出来ることが分かります。
上にある右向き三角ボタンを押して、実行を再開します。

プログラムが終了し、元の状態に戻りました。

まとめ

Ubuntu18.04上にvscodeをインストールし、venvで用意したpythonの実行環境を使い、vscode上でGoogleのトップ画面を取得するプログラム(sample.py)を作成し、実行・デバッグしてみました。

次回(↓)は、この環境でdjangoに挑戦します(?)。

未分類

前書き

前回はWindows上のVirtualBoxで入れたUbuntuにPostgreSQLをインストールし、簡単なテーブルを作成・表示させてみました。

今回はそのテーブルをWindowsから見てみようという記事です。

Ubuntu側の設定

PostgreSQLの設定

前回はUbuntu上のpsqlコマンドから同じマシン上のPostgreSQLサーバーに接続してSQLを叩いていました。現在のPostgreSQLの設定はこのタイプの接続しか許可していません。別のマシン上のアクセスを許可する設定をしていきます。

この設定は設定ファイルに書かれているので、ターミナル/sshで接続したコマンドプロンプトから、viコマンドを使ってファイルを編集する必要があります。ただ、viはとても癖のあるエディタで機能も少ないので、それを改良したvimを先にインストールします。操作感は同じですが、ハイライトされるなどの機能が違います。

$ sudo apt install -y vim

インストールが終わると、同じviコマンドでも、動きが変わってきます。ではまず、/etc/postgresql/10/main/pg_hba.confを編集して、別のマシンからの接続設定を追加します。

$ sudo vi /etc/postgresql/10/main/pg_hba.conf

viの操作方法(最小限)

キー操作意味
上に移動
下に移動
左に移動
右に移動
i入力モードに入り、以降[ESC]で戻るまで打ち込んだ文字を挿入します。
xカーソル位置の文字を削除します。
dd1行削除します。
[ESC]入力モードから戻ります。
ZZファイルを保存して終了します。
:q!ファイルを保存しないで終了します。

上を参考にどうにかして、ファイル末尾付近に移動して「ココ追加」の1行を追加してみてください。vimでググるとよりいろいろな操作方法を知る事ができますが、覚えることが多いので今は最小限でいいです。

# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# ↓ココ追加
host    all             all             10.0.2.2/32             md5
# ↑ココ追加
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
"/etc/postgresql/10/main/pg_hba.conf" 102L, 4790C             90,10        末尾

追加したのは、「(ホストから転送されてきた)ホスト自身からの接続の場合、パスワードで認証する」という設定です。10.0.2.2はVirtualBoxがホストに割り当てている仮想ネットワーク上のアドレスです。編集しているpg_hba.confファイルのフォーマットについての詳細は、

20.1. pg_hba.confファイル (PostgreSQLのマニュアル)

を御覧ください。よく分からないと思いますが、丁寧に説明しているとそれぞれ1つの記事になってしまうので、今回は割愛します。

参考: VirtualBoxのネットワークについて

参考: pg_hba.confファイルの認証設定

次にpostgresql.confを編集し、TCP/IPで待ち受ける(listenする)IPアドレスを追加します(デフォルトではTCP/IPで待ち受けていない=IPアドレスでの接続を待ち受けていない)。

$ sudo vi /etc/postgresql/10/main/postgresql.conf

ここでも「ココ追加」と書かれている1行を、どうにかして追加してください。

# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
# ↓ここ追加
listen_addresses = '*'                  # what IP address(es) to listen on;
# ↑ここ追加
                                        # (change requires restart)
port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)
#superuser_reserved_connections = 3     # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
                                        # (change requires restart)
#unix_socket_group = ''                 # (change requires restart)
#unix_socket_permissions = 0777         # begin with 0 to use octal notation
                                        # (change requires restart)
#bonjour = off                          # advertise server via Bonjour
<c/postgresql/10/main/postgresql.conf" 664L, 23154C           64,15-10       8%

完了すると、Ubuntuが持っているネットワークI/F全てで、ポート5432の接続待ちをする設定が追加されます。後はPostgreSQLサービスを再起動して新しい設定を読み込ませるだけです。

$ sudo service postgresql restart

VirtualBoxの設定

sshのときと同様にポートフォワードの設定が必要です。Ubuntuを動かしているVirtualBox上のメニューから、[デバイス]>[ネットワーク]>[ネットワーク設定]を開きます。

[高度]>[ポートフォワーディング]を押します。

上記のようにゲストIPを10.0.2.15でホスト/ゲストポートを5432に設定し、名前を適当につけて[OK]を押します。

すると、ホスト側の5432ポートに来た接続は、ゲスト側のIP10.0.2.15のポート5432に転送されます。この設定がない場合、ファイヤーウォール(NAT)に弾かれて、ホストからゲストにPostgreSQLの標準通信ができません。

Windows側の設定

PostgreSQLクライアントを導入

PostgreSQLクライアントの選定

PostgreSQLの無料クライアントはいくつか種類があります。

最も軽いのはUbuntuで使用したpsql(サーバー同梱)です。これはバッチ実行などをする際にはよく使いますが、コマンドから直に何かしたいとき以外はあまり使いません。

PostgreSQL専用のGUIクライアント兼管理ツールpgadminがあります。これも管理をする際には使いやすいツールです。

今回は、他のDBでも汎用に使用できるGUIのSQLエディタである、DBeaverをご紹介します。これは元々主にJava開発のIDEとして使用されるeclipseのプラグインとして実装されたものです。日本ではこのような種類ではA-5が有名ですが、世界的には現在このDBeaverが無料汎用SQLエディタでNo.1です。

DBeaverのインストール方法

DBeaverのインストールにはいくつか方法があります。

  1. インストーラを使用する
  2. zipを展開してjdkの設定を自分でする
  3. chocolateyを使用してインストールする

今回はchocolateyを使用して、インストールしますが、いずれの方法でも構いません。

Chocolateyとは

以下のリンク先のソフトです。

Chocolatey Software | Chocolatey – The package manager for Windows

Windows用のコマンドラインベースのパッケージ管理ツールに該当します。Ubuntuのaptのような使い勝手のツールです。便利なので、私も可能なときはchocolateyでアプリをインストールしています。便利な点はいくつかありますが、

  • まとめてソフトのアップデートを出来ること
  • インストールしたアプリの一覧をエクスポートし、他のPCにもまとめてインストールすることが出来ること
  • 共通の依存パッケージを複数入れなくて良くなったりすること

くらいでしょうか…

逆にイケてない点は

  • アプリ独自で更新機能を持っているソフトはどっちでアップデートする迷う(DBeaverもそうですが)
  • ユーザーの少ないパッケージは作りが適当で、うまくインストール/アンインストールできない場合がある

辺りです。

Chocolateyのインストール

インストール方法はあらゆるケースを網羅した資料が英語だけど↓にあります。

Chocolatey Software | Installation

私は以下の手順でインストールしています。

  1. Windowsキーを押す
  2. cmdと打ち込んでCtrl+Shift+[Enter]
  3. ユーザーアカウント制御(UAC)の問い合わせに[OK]
  4. 立ち上がった管理者権限のコマンドプロンプトで以下を実行
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command " [System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

終わるとchocolateyが使えるようになります。コマンドラインが不得意な人は、続けてchoco install chocolateyguiでGUI版もインストールできます。

DBeaverのインストール

管理者権限のコマンドプロンプトから

cinst dbeaver -y

するだけでインストールは終了します。

Windowsから接続

DBeaverの起動

初回起動時に出てくるポップアップは全部キャンセルします。一度しか見れないメッセージだと間違えるかもしれないので。

左上の新しい接続ボタンを押します。

PostgreSQLのゾウさんを選択して[次へ]

DatabaseとUserとPasswordを記述して、[テスト接続]

まだドライバがないため、ダウンロードするか聞いてくれるので[ダウンロード]

ダウンロードが完了すると、正しく設定されていれば上のようなテスト接続成功画面が出てきます。
満足して[OK]→[終了]してください。

元の画面に戻ると、データベースナビゲータで選べるデータベースが追加されてます。開いてみてください。

ポチポチ押していくと、前回作成したデータベースやテーブルがグラフィカルに表示されてることが分かります。ここでexample_tableをダブルクリックすると…

何やら分かりやすく整理されてテーブルの定義が表示されています。上部中央のデータタブをクリックすると…

当然のようにExcel表のような画面が表示されています。SQLを覚えてpsqlでコマンド叩かなくてもExcelが使える人なら簡単な編集は出来てしまいます。もちろんSQLも便利に使えるソフトです。でも、これでデータベースも怖くなくなりそうじゃないですか?

まとめ

WindowsのVirtualBox上で動くUbuntuに入れたPostgreSQLサーバーを外部からTCP/IPで接続できるように設定し、WindowsからDBeaverを使ってアクセスできるようになった。

次回は、Ubuntu上でVisual Studio codeをインストールし、pythonの開発環境を整えたいと思います(↓)。

未分類

前回まではVirtualBox上のUbuntu18.04にsshサーバーをインストールして、Windowsからsshで繋げられるところまで実施しました。

今回はUbuntu18.04にHerokuでよく使用されるPostgreSQLをインストールして、SQLなDatabaseを使えるようにします。

インストールの前に

Dockerじゃダメなの?

最近の環境構築では、こういうケースで、便利なのでDockerを使うことも多いです。ただし、それはUbuntuやLinuxに慣れてれば、の話なので、今回はまずは基本のローカルインストールを実施します。

Databaseとはどんなもの?

みんなが使用する大規模データを入れておくサーバーです。ファイルサーバーよりもより細かく、大量のデータを検索したり集計したりできます。検索したり集計したりするのに、データの持ち方や、検索・集計に使用するI/Fや言語などの区別により、いろいろな種類のデータベースがあります。

今回インストールするPostgreSQLは古式ゆかしいSQLを使用するRDBMSという分類のデータベースです。Excelのお化けみたいなタイプで、OracleやMySQLなどと同様古くからある、最もオーソドックスなタイプのデータベースになります。

インストール

$ sudo apt install postgresql

いつもどおり、パスワードを入力して、容量確認して"y"でOKです。2020年2月4日現在PostgreSQLの最新バージョンは12ですが、ここでインストールされるバージョンは10になります。これはUbuntu18.04が約2年前のOSであることが原因です。最新バージョンを入れる方法もありますが、そこまで凝ったこともしないので、今回はバージョン10のまま使います。

初期設定など

素のPostgreSQLはpostgresという管理ユーザーが一人だけいるパスワード設定のない管理用のデータしか入っていないデータベースになっています。

管理ユーザーで接続

まずはsudoで PostgreSQLの管理ユーザー postgres になります。

user@ubuntu1804:~$ sudo -i -u postgres bash --login
[sudo] user のパスワード: 
postgres@ubuntu1804:~$ 

PostgreSQLに接続します。ここではPostgreSQLサーバーに同梱されているpsqlコマンドを使います。

postgres@ubuntu1804:~$ psql
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# 

この状態でPostgreSQLに接続しています。例えば現在操作しようとしているデータベースの状態を調べるには…

postgres-# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

postgres-# 

psqlコマンドの内部コマンドである、\coninfoで、現在接続しているデータベースを調べています。"postgres"という名前のデータベースに接続しています。ややこしいのですが、PostgreSQLに限らずデーターベースサーバー内には通常複数のデータベースが格納されていて、それぞれに名前がついています。この"postgres"という名前のデータベースは、管理用のデータが入っているデータベースです。

その次に実行している\l内部コマンドが、現在接続しているPostgreSQLサーバー内のデータベース一覧です。全て管理用のデータベースなので、普通のデータは格納しませんし、これらのデータベースは基本的に直接いじりません。

管理ユーザーのパスワード設定

まずはpostgresユーザーのパスワードを設定します。 (パスワード)部分にはご自分の覚えやすいパスワードを設定してください。

postgres-# alter user postgres with password '(パスワード)'
postgres-# 

一般ユーザーとデータベース作成

このままPostgreSQL内のユーザー追加と、データベース追加を行います。
(ユーザー)(パスワード)(ユーザーデータベース名)には自分で名前を入れてください(ユーザー名はUbuntuのユーザー名と一致させてください)。ここではそれぞれuser, password, userdbで実施しています。

postgres=# create user "(ユーザー)" password '(パスワード)';
CREATE ROLE
postgres=# create database "(ユーザーデータベース名)" owner "(ユーザー)";
CREATE DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 userdb    | user     | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
(4 rows)

postgres=# 

psqlの内部コマンド\lで新しいデータベースuserdbが所有者userで作成されているのが分かります。

なお、今回設定されたパスワード、実は使用しません。ローカル接続のpeer認証を使っているからなのですが、ネットワーク経由で接続する場合に初めて必要になるのですが、今回はネットワーク経由で使用しないということです(SSLクライアント認証などを使用する場合はネットワーク経由でも使いませんけども…)。

これで一旦管理ユーザーでの作業が終わるので、抜けます。psqlからは\qで、sudo bashからはexitで抜けます。

postgres=# \q
postgres@ubuntu1804:~$ exit
ログアウト
user@ubuntu1804:~$ 

一般ユーザーで接続

改めてpsqlコマンドで繋ぎ直します。(ユーザーデータベース名)(ユーザー)には先程作成したものを使用してください。ここではそれぞれuserdb, userとしています。

user@ubuntu1804:~$ psql -d (ユーザーデータベース名) -U (ユーザー)
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.

userdb=>

テーブル作成とデータ追加

何もしないのも寂しいのでサンプル程度のデータを作成します。以下を貼り付けて実行してください。create tableでExcel表のようなテーブルを作成し、insertでデータをテーブルに挿入しています。英語圏の人なら何をしているかこれだけで分かるような文法です。

create table example_table (item_id varchar(14) primary key, item_name varchar(100), kakaku numeric(10,0));
insert into example_table values('4514603365511','アサヒ 十六茶 PET500ml',124);
insert into example_table values('4514603343519','アサヒ 十六茶 (LL)紙パックスリム250ml',80);
insert into example_table values('4514603377019','アサヒ 十六茶 PET2L',350);
insert into example_table values('4514603240719','アサヒ 十六茶 PET275ml',115);
insert into example_table values('4514603377217','アサヒ 十六茶 PET630ml',140);
insert into example_table values('4514603240818','アサヒ 十六茶 ボトル缶275g',115);
insert into example_table values('4514603241112','アサヒ 十六茶 缶245g',86);
insert into example_table values('4514603386110','アサヒ 十六茶ほうじ茶 PET630ml',140);
commit;

実行するとexample_tableが作成されて、中にアサヒ飲料様の尊いお茶のデータが数件作成されます。元データは↓のホームページからお借りしました。

JANコード一覧|商品情報|アサヒ飲料

では作成したテーブルのデータをselectで見てみましょう。

userdb=> select * from example_table;
    item_id    |               item_name               | kakaku 
---------------+---------------------------------------+--------
 4514603365511 | アサヒ 十六茶 PET500ml                |    124
 4514603343519 | アサヒ 十六茶 (LL)紙パックスリム250ml |     80
 4514603377019 | アサヒ 十六茶 PET2L                   |    350
 4514603240719 | アサヒ 十六茶 PET275ml                |    115
 4514603377217 | アサヒ 十六茶 PET630ml                |    140
 4514603240818 | アサヒ 十六茶 ボトル缶275g            |    115
 4514603241112 | アサヒ 十六茶 缶245g                  |     86
 4514603386110 | アサヒ 十六茶ほうじ茶 PET630ml        |    140
(8 rows)

userdb=> 

それっぽいデータが表示されました。十六茶、皆さんも大好きですよね。

まとめ

WindowsのVirtualBox上にインストールしたUbuntu18.04にPostgreSQLをインストールし、簡単なテーブルを作成、表示してみました。

次回はもう一発PostgreSQLをやります。ホスト側から、DBeaverというSQLエディタを使って操作してみます。

未分類

概要

前回Windows上にVirtualBoxでLinux(Ubuntu LTSデスクトップ版)を構築する方法を掲載しました。

構築後は大体こんな感じの画面になっております。

今回は、このLinux上にsshサーバーとPostgreSQLサーバーを入れてみたいと思います。

デスクトップ版なのにサーバーを入れる?

はい。デスクトップ版でもsshサービスやDBサービスを提供することが出来ます。サーバー版とデスクトップ版の違いはやや古いですが、以下のように書かれています。

The first difference is in the CD contents. The “Server" CD avoids including what Ubuntu considers desktop packages (packages like X, Gnome or KDE), but does include server related packages (Apache2, Bind9 and so on). Using a Desktop CD with a minimal installation and installing, for example, apache2 from the network, one can obtain the exact same result that can be obtained by inserting the Server CD and installing apache2 from the CD-ROM.

The Ubuntu Server Edition installation process is slightly different from the Desktop Edition. Since by default Ubuntu Server doesn’t have a GUI, the process is menu driven, very similar to the Alternate CD installation process.

Before 12.04, Ubuntu server installs a server-optimized kernel by default. Since 12.04, there is no difference in kernel between Ubuntu Desktop and Ubuntu Server since linux-image-server is merged into linux-image-generic.

For Ubuntu LTS releases before 12.04, the Ubuntu Desktop Edition only receives 3 years of support. This was increased to 5 years in Ubuntu LTS 12.04 In contrast, all Ubuntu LTS Server Edition releases are supported for 5 years.

https://help.ubuntu.com/community/ServerFaq#What.27s_the_difference_between_desktop_and_server.3F

以下意訳

  • 「サーバー」CDは、Ubuntuがデスクトップパッケージ(X、Gnome、KDEなどのパッケージ)と見なすものは含めませんが、サーバー関連パッケージ(Apache2、Bind9など)を含んでいますデスクトップCDを使用しても、たとえばネットワークからapache2をインストールすると、サーバーCDを挿入し、CD-ROMからapache2をインストールする場合とまったく同じ結果を得ることができます
  • Ubuntu Server Editionのインストールプロセスは、Desktop Editionとは少し異なります。デフォルトではUbuntu ServerにはGUIがないため、プロセスは簡単なメニュー選択によるインストールプロセスになります。
  • 12.04より前のバージョンでは、Ubuntuサーバーはデフォルトでサーバー最適化カーネルをインストールします。 12.04以降、linux-image-serverはlinux-image-genericにマージされるため、Ubuntu DesktopとUbuntu Serverの間でカーネルに違いはありません。
  • 12.04より前のUbuntu LTSリリースでは、Ubuntu Desktop Editionのサポートは3年間のみです。これは、Ubuntu LTS 12.04で5年に延長されました。対照的に、すべてのUbuntu LTS Server Editionリリースは5年間サポートされます。

ようは最初のインストールプロセスと、初期インストールパッケージが違うだけなのです。それらのパッケージは後から手動で追加して同じ状態にすることが可能です。だから、デスクトップ版でもサーバー版と同じサーバー用のソフトをインストール出来ます。

sshサーバーをインストールする

sshとは

Secure SHellの意味で名付けられたプロトコルの名前です。shellというと、Windowsで言えばコマンドプロンプトの裏で動いているcmd.exeとかが該当し、Linuxでも代表的なものはbashとかになるのですが、sshはそれらのshellとはちょっと違います。経緯はここでは書きませんが、httpなどと同じ「プロトコル」で、ネットワークで使うものだと分かってもらえれば結構です。

httpはWebでのアクセスに使うプロトコルということは現代人なら皆知ってます(?)。ではsshは何に使うプロトコルなのでしょう?答えは、ネットワークで繋がった離れたところにあるコンピュータで、bashなどのshellを使うためのプロトコルです。例えば、自宅/学校/会社からVALUE/CORE/X-SERVERなどのレンタルサーバー、或いはconohaなどのVPS上でコマンドを使いたいときに、このsshを使います。

インストール

デスクトップ版なので、GUIアプリを使ったインストールも可能なのですが、ここではUnix系らしくコマンドでインストールしていきます。実のところ Ubuntuデフォルトの GUIパッケージ管理アプリはあまり使いやすくありません。ではまずはデスクトップ上で右クリックしてメニューを開き、「端末を開く」を選択するか、Ctrl+Alt+Tを押して、端末(ターミナル)を起動してください。

これがターミナルです。起動したら、以下のように打ち込むと、sshサーバーのインストールが始まります。

$ sudo apt install openssh-server

実行するとパスワードを聞かれるので、自分のパスワードを入れてください。


ディスク領域をどれくらい使うなどの情報が出た後、インストールしてもいいか聞かれると思うので、そこで「y」とすれば後は待ってるだけで入るはずです。

サービスの停止・起動・再起動・状態問い合わせ

sshサーバーをインストールしたので、ubuntuにsshプロトコルを使ってアクセスできるようになりました。sshサーバーが提供しているのはsshサービスです。このようなサービスはUbuntuが動いてる間はずっと何もしなくてもサービスを提供し続けています。なので管理者の都合で必要なときに起動したり、停止できるようになっています。Ubuntuでは、こういうサービスを管理するためのコマンドが用意されています。

例えば、ターミナルから、以下のように打ってみてください。

$ sudo service sshd status

これはsshdというサービスのstatus(状態)を問い合わせるためのコマンドです。緑色で、active(running)=アクティブ(実行中)と表示されているので、sshdというサービスが稼働中であることが分かります。およそ見当がついていると思いますが、このsshdがsshサーバーです。先程インストールしたサーバーが既に動作中ということです。大抵のサーバーソフトはインストールするだけですぐに起動するので覚えておいてください。なお、このコマンドは「q」を押すことで終了します。

今回はサービスの状態問い合わせをしましたが、一般的には以下の形式が使えて、

$ sudo service サービス名 指示

「指示」に使えるのは、statusの他に、 start(開始)、stop(停止)、restart(再起動)などがあります。が、名前のとおりなので説明は省略します。詳細はman sshdなどで調べてください。そのまま打ち込んだ場合は英語の説明になると思うので、得意じゃない人はググってchromeなどで翻訳した方がいいかもしれません。

ホストからsshで接続する

ホスト?ってなるかもしれませんが、これはWindowsのことです。VirtualBoxのようなソフトでは、メインになってるOSをホストOSと呼び、その中で仮想的に起動しているOSをゲストOSと呼びます。なので、今回はWindowsがホストOSで、UbuntuがゲストOSとなります。つまりWindowsからUbuntuにsshで接続するということです。

ホストからゲストに接続?

仮想化して2つOSが動いてるにしたって、機械は1台だけです。ネットも何もないのに何をどう接続すると言ってるのでしょうか?
答えは、仮想ネットワークです。ネットワークも仮想化しているので、本物のネットワークと同様に接続して通信出来るのです。

画像のように仮想ルーター(NAT)まであって、簡単なファイヤーウォールまで備わっています。ファイヤーウォールがあるということは、つまりゲストOS側からは自由にネットワークにアクセスできますが、ホストOS側からは弾かれるということです。同じPCの中なのに…

ポートフォワードの設定

ファイヤーウォールがあるなら、その外から繋ぐためには、家庭用ルーター同様穴あけが必要になります。このファイヤーウォールを構築しているのは、VirtualBoxなのでまずはそのポートフォワード設定を行います。起動してる仮想マシンのメニューの[デバイス]から[ネットワーク]>[ネットワーク設定]を選択してください。

出てくる画面で、[高度]を開いて、[ポートフォワーディング]のボタンを押します。

ホストポート/ゲストポートをsshが使うポート22に設定し、ゲストIPを10.0.2.15に設定すればOKです。これで、Windowsにsshで繋ぎに来ると、ポートフォワードされてUbuntuのsshサーバーに繋がるようになります。

WindowsからUbuntuにssh接続

Windows 10ならsshコマンドが標準でついているので、そのまま使えます。他のWindowsの場合はsshクライアントを用意してください。まずはコマンドプロンプトを開いて、、、

>ssh ユーザー名@localhost

としてみます(ユーザー名はUbuntuのユーザー名です)。すると、

>ssh ユーザー名@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:KM795/aQQ75Vk0ZuE0po/wslaCVMYRKHZ/U3CtZvtfA.
Are you sure you want to continue connecting (yes/no)?

まずはこんなことを聞かれます。sshでは、まずホスト間(この「ホスト」は「コンピュータ」くらいの意味で、「ホスト/ゲスト」の「ホスト」ではありません)の認証をして、その後ユーザーの認証をするのですが、初めて通信するホストの場合、このホストを信用していいかどうかを必ず聞かれます。ここでyesを選択すると、次回以降同一ホストでは聞かれません。ここでは、Ubuntuと通信してるので、Ubuntuを信用していいかどうかを聞かれています。「yes」を押して先に進みます。

>ssh ユーザー名@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:KM795/aQQ75Vk0ZuE0po/wslaCVMYRKHZ/U3CtZvtfA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
ユーザー名@localhost's password:

ここで改めてパスワードが聞かれます。Ubuntuインストール時に設定したパスワードでログインしてください。

>ssh ユーザー名@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:KM795/aQQ75Vk0ZuE0po/wslaCVMYRKHZ/U3CtZvtfA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
ユーザー名@localhost's password:
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-28-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

0 個のパッケージがアップデート可能です。
0 個のアップデートはセキュリティアップデートです。

Your Hardware Enablement Stack (HWE) is supported until April 2023.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

ユーザー名@ubuntu1804:~$

ここまで来ればssh接続成功です。あとはWindows上のコマンドプロンプトから、Ubuntuのターミナルで出来ることは全て実施することが出来ます。

さらなるセキュリティと利便性を求める方へ

sshの目玉は公開鍵認証です。丁寧な解説はありませんが、興味があり、内容的に余力のある方は↓もやってみてください。

まとめ

今回はWindows上にVirtualBoxを使って動かしたUbuntuにsshサーバーをインストールしてWindowsから繋いでみました。

次回は、データベース・サーバーである、PostgreSQLをインストールしてみます。

未分類

別にMacユーザーさようならという記事ではありません。メインターゲットがWindowsユーザーなだけです。

Linuxとは

Unixという古式ゆかしい文化の流れを汲むOSの1つです。仲間にFree/Open/Net-BSDとかSolarisとかいます。そうそう、冒頭で触れたMacが使ってるOSもFreeBSDの流れを汲むOSの1つです。商用のUnixもいくつかあり、MacOS/Solarisとかは商用ですね。詳細は https://ja.wikipedia.org/wiki/Linux参照。

Unix系OSの特徴は…ターミナルだけで何でも出来るように設計されていることです(本当の意味ではPOSIX準拠くらいが妥当だと思う)。我々Windowsユーザーには信じられないですね。簡単に言えばコマンドプロンプト1つだけで何でも出来るというわけですから。当然マウスはオプションです。もちろんWindowsも極めると大抵の人はほとんどマウス使わなくなりますけど…。

ターミナルだけで何でも出来るということは、ネットワーク的に離れたところからでも、sshなどで接続すれば手元のPCと同じように何でも出来るということです。つまりネットワーク越しの作業がしやすい=サーバー向けということになります。サーバーは普通ディスプレイも繋がっておらず、データセンターでラックに積まれるようなPCなのです。これにsshなどで繋いでコマンドラインから操作できるのがUnix系OSです。Windows系のサーバでは、通常そういう操作は行われず、リモートデスクトップのGUI画面を使ってサーバを操作します。一見初心者でも楽に操作できますが、サーバ単体のコストが高いのと、負荷が高いときに(自動で)サーバを増やして対応する(スケールアウト)ようなことが出来ないので、サーバーの主流はUnix系になります。

Windowsから使うLinux

WindowsもLinuxも括りはOSです。OSとは基本電源入れてから(ブートローダ除けば)最初に起動するものなので、普通は何かのOSを使っていたら、他のOSは同時に起動しません。アプリとは違うのですよアプリとは。つまりWindowsを使っていたら、普通は同時にLinuxを使えないのです。

しかし、ゲームをするためにWindowsを使っていたいけど、裏でスクレイピングさせてるからLinuxも同時に使いたいなぁとかいうことはあるわけです。昔はこれを実現するためにはPCが2台必要で、1台にWindowsを入れてゲーム、1台にLinuxを入れてスクレイピングといった使い方をしないといけませんでした。そんなゲーマーのために(?)最近は「仮想化」という単語とともに、1台で複数のOSを同時に動かす技術が生まれています。

仮想化の時代

現代はあらゆる仮想化の技術によって、いろいろな恩恵を受けることができます。OSも例外ではなく、CPU仮想化支援とハイパーバイザーの力を借りて、複数のOSを同時に動かすことが出来ます。

Windows上でLinuxを動かす場合、2020年2月2日現在、以下の方式が一般的です。

  1. Hyper-V(ハイパーバイザ)を無効にしてVirtualBox/VMwareなどを使って好きなディストリビューションのLinuxを動かす
  2. Hyper-V(ハイパーバイザ)を無効にしてWSLを使って対応ディストリビューションのLinuxを動かす(WSL1のまま使う)
  3. Hyper-V(ハイパーバイザ)を有効にしてWindowsもLinuxも使う(WSL2はこの方式)

2.は動かないソフトがあったり、安定性が問題になる場合があります。3.は1.の使い方が出来なくなる問題があります(最近のVirtualBoxは機能的にHyper-V有効でも動くようになったらしいが、ハード依存しており安定していない)。そこで今回は1.のケースを選択します。

なお、1~3いずれにしてもCPU仮想化支援を前提としています。今使われてるCPUは大半がこの機能を持っていると思いますが、BIOSの設定次第の場合があるので、BIOSで有効化しておきましょう。

なお、最近巷でよく聞くDockerなどのコンテナ系の仮想化もありますが、これらはOSそのものを仮想化してるわけではないので、ここでは扱いません。OSそのものの機能はホストのものを使い、アプリの実行環境をコンテナという箱で管理する方式に近いです。ようは1.~3.でLinuxをインストールしないと使えないということです。

VirtualBoxのインストール

現在主流のVMソフトはVirtualBox/VMwareの2つですが、ここでは無料で登録せずに使えるVirtualBoxを選択します。

vagrantで良くない?

いいえ。某学習サイトなどで紹介される、vagrantもローカルインストール用に中で使ってるのはVirtualBoxです。なので、VirtualBoxを意識せずにvagrantで簡単インストールすることも可能です。ただ、vagrantは元々いろいろなPCに同じLinux環境をインストールしたい人が楽に出来るよう開発されたツールです。初心者が何が何だか分からないけど使うような、親切設計の便利ツールではありません。悪いことは言わないので、最初はVirtualBoxを直に使って環境に対する理解を深めることをオススメします。そうでないと問題が起きたときの対応が全く取れなくなります。慣れてからvagrantの恩恵に預かってください。便利さに心打たれます。

ダウンロード

Downloads – Oracle VM VirtualBox

ここから最新をダウンロードします。

インストール

ダウンロードしたインストーラをポチポチするだけでOKです(途中ドライバのインストールで署名関連の警告が出るが気にせずOKでいい)。難しいことはありません。

→PC内に仮想PCをもう一台起動することが出来るようになった

Linuxのインストール

VirtualBoxのおかげで、PC内に仮想PCをもう一台起動することが出来るようになりました。しかし、この仮想PCにも設定とOSのインストールという作業が必要になります。普通PCを買うとOSはプリインストールされた状態で納品されますが、元々素のPCにはOSなど入っていないのです。そこで、まずは仮想PCの作成とLinuxのインストールをします。

ディストリビューションの選定

Linuxのインストールをする前にディストリビューションを決めます。Linuxと一口に言っても、実はその種類であるディストリビューションが星の数ほどあるからです。しかし主要なディストリビューションを2つ挙げるとすると、Redhat(CentOS)とUbuntuです。日本で業務用に使う場合はRedhat(CentOS)が多いですが、個人用で使いやすいディストリビューションはUbuntuになります。オススメは個人用に扱いやすいUbuntuでLinuxに慣れるです。Redhatは仕事で必要になったらCentOSで勉強する、くらいでいいと思います。なので、ここでの選択もUbuntuです。

ダウンロード

Ubuntuを入手する | Ubuntu | Ubuntu

デスクトップ版かつサポート期間の長いLTS版をダウンロードします。本当はサーバー版の方が適切なのですが、GUIが全く使えないので、慣れてる人以外はデスクトップの方が扱いやすいです。サーバー版の方がGUIがない分軽くなります。

2020年2月2日現在、最新のLTSは18.04.3です。2020年4月には新しいLTSが出てくる予定ですが、出始めは不具合も多いので、初心者はリリース後2~3ヶ月経つまでは古いLTSで様子を見た方がいいかもしれません。

インストール

説明サイトが他にあるのでそちらに譲ります

VirtualBox6にLinux(Ubuntu18.04LTS)をインストールする方法

必要十分な情報があり、クライアントとして使う分には申し分ない環境が整います。が、1件だけ追加の設定が…GUIの日本語設定が足りません。

[左下のアプリケーションを表示する]の点々を左クリックします。すると、以下のような画面が出るので…

ちょっとスクロールして下の方にある「言語サポート」を押してください。アプリが起動して、以下のダイアログが出ます。

ここで、インストールを選択します。パスワードを聞かれるので入力すると日本語サポートがインストールされます。

閉じれば完了です。

Tips.1. Terminal起動ショートカット

デフォルトショートカット、左Ctrl+Alt+TでTerminalを起動出来ます。結構便利。

Tips.2. Windowsアプリの切り替えをしたい

Alt+TABでアプリの切り替えを出来ますが、これはUbuntu内の切り替えになります。
Windows側の切り替えをキーボードからしたい場合は、右Ctrlキーを一度押してからAlt+TABでWindowsアプリを切り替えられます。

Tips.3. GUIが固まった。コマンドだけでも使えないか?

右Ctrl+F1~F7でUbuntu内の仮想端末を切り替えられます。
GUI画面はそのうち1つなので、仮想PC自体が固まってなければ、別の仮想端末からログインすることでコマンドが使えます。
sshなどでリモートから操作できるようにするのも手です。

Tips.4. ターミナルでのコピー&ペースト

WindowsだとCtrl+CとCtrl+Vでコピペですが、Linux GUIのターミナルだと基本はShift+Ctrl+CとShift+Ctrl+Vでコピペになります。
ようはShiftも押す必要があるということです。ターミナルだけですけどね。

まとめ

Windows上でUbuntuを同時に使えるようになりました。インストールしたUbuntuで動画を見ることも出来ますし、OpenGLも簡単なものならそれなりに動かすことが出来るはずです。サーバーとしての機能、ネットワーク系の設定は今回端折っていますが、次回sshとpostgresをインストールする際に説明予定です。

↓次回