ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Ubuntu Xenial (16.04) でLinux kernel 4.10が利用可能に

Ubuntu Xenialでlinux-generic-hwe-16.04をインストールしている場合、Linux kernel 4.10が利用可能になったようです。 アップデートしようとしたら出てきました。 今日はそれだけです。

~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-4.10.0-27 linux-headers-4.10.0-27-generic
  linux-image-4.10.0-27-generic linux-image-extra-4.10.0-27-generic
The following packages will be upgraded:
  linux-generic-hwe-16.04 linux-headers-generic-hwe-16.04
  linux-image-generic-hwe-16.04
3 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.2 MB of archives.
After this operation, 308 MB of additional disk space will be used.
Do you want to continue? [Y/n]

ちなみにLinux kernel 4.10の変更点一覧

kernelnewbies.org

そのほか

Debian 8.9への更新

検証用のVLAN環境で色々動かしているDebian Jessieのアップデートを行った。バージョンが8.9になった。そろそろDebian 9にしようか、どうしようか。

RHEL7.4 Betaのカーネルを触ってみた

CentOS 7.3でRHEL7.4 Betaのカーネルをビルドして動かしてみた。ネットワークパフォーマンスが上がった。噂通りEL 7.4は期待できそう。ちなみにCentOS 7.3でRHEL7.4 Betaのカーネルを動かした理由ですがDPDK+OVS環境のパフォーマンスが上がるか調べたかったためです。予想通り良い結果が出てホッとしています。

MAAS 2.2が標準リポジトリーで提供されるようになった

MAAS 2.2がUbuntu Xenialのメインリポジトリーにてインストール可能になった模様(7/20頃?)。しばらく2.2系を使いたいので、PPAは-rオプションで削除した。

続・macOSでリモートサーバーに接続してLinuxの仮想マシンマネージャーを操作する

先日、こんなことを書きました。

ytooyama.hatenadiary.jp

そして、最近macOS 10.12.6のアップデートを適用したのですが、それ以降つぎのようにリモートサーバーにSSH接続するとエラーが表示され、リモートサーバー上でソフトウェアを実行してもXサーバーが起動してないよみたいなエラーになります。つまり、XアプリケーションのSSH転送ができなくなっていました。

% ssh -XC root@172.17.32.90
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

エラーでWeb検索した結果、次のようなフォーラムのページを見つけました。

stackoverflow.com

ssh_configになにがしを書けとか、-Yオプションを使うといいよとか、Xquartzを再インストールすると良いよとか色々あり、再インストール以外は書かれていることは一通り試してみたのですがダメで、私の環境の場合は結局、次のように設定したらなんとかなりました。

その設定方法とは、macOS側のsshクライアントの設定にXAuthLocationを指定するというものでした。パスはOS Xのバージョンによって違うようです。とりあえずwhichコマンドやwhereisコマンドなどで探せば良いと思います。そこで出てきたパスをXAuthLocationとして指定します。ちなみにHost *のところに書いてしまいましたが、X転送するホストが決まっている場合は、ホスト名をきちんと書いても良いかもしれません。

% vi ~/.ssh/config
Host *
...
XAuthLocation /opt/X11/bin/xauth

macOSでリモートサーバーに接続してLinuxの仮想マシンマネージャーを操作する

[7/20 追記]

CentOS 7 minimalインストールでは次のパッケージをインストールする必要がありました。 インストールするフォントはなんでも構いません。フォントをインストールしないとメニューが豆腐だらけになります。

yum -y install xauth ipa-pgothic-fonts

また、sshdの以下の設定を一部変更する必要がありました。設定を反映させるためにsshdサービスの再起動が必要でした。

X11Forwarding yes
X11DisplayOffset 10

ここではCentOS 7を例にしましたが、他のOSでも最小インストールの際は上のような対応が必要かもしれません。 以上、追記終わり。


f:id:ytooyama:20170714230840p:plain:w450

昔のOS X(確かSnow Leopardまで)にはX11.appというのが標準で存在していたので簡単にできたのですが、現在はXQuartzというX11.appの改良版のX Window Systemをインストールすると、macOSX11アプリケーションを実行したり、リモートサーバー上のXアプリケーションを実行したりすることができるようです。

今回は例として、サーバーにインストールした仮想マシンマネージャーを起動してmacOSで操作するまでの手順です。

XQuartzをダウンロードしてインストー

XQuartzを公式サイトからダウンロードします。

https://www.xquartz.org/

インストールは少々時間がかかります。 インストール後は一旦macOSをログアウトする必要があります。

f:id:ytooyama:20170714233735p:plain

XQuartzを起動

XQuartzはアプリケーションフォルダーのユーティリティーフォルダの中にappファイルがあります。 ダブルクリックしてXQuartzを起動します。

接続する前に一つだけ重要な設定(OptionキーでAlt_LとAlt_Rを送信)を有効化しておきます。

f:id:ytooyama:20170714230446p:plain

リモートサーバーにSSH接続

XQuartzのターミナルを開きます。 sshコマンドを使っていつものように接続するだけですが、ポイントは-Xオプションをつけて実行するというところです。パスワード入力を要求されたらリモートサーバーの指定ユーザーのパスワードを入力します。

% ssh -X user@xserver-host

ちなみに-Xオプションについてはマニュアルに次のような記述があります。

     -X      Enables X11 forwarding.  This can also be specified on a per-host
             basis in a configuration file.

             X11 forwarding should be enabled with caution.  Users with the
             ability to bypass file permissions on the remote host (for the
             user's X authorization database) can access the local X11 display
             through the forwarded connection.  An attacker may then be able
             to perform activities such as keystroke monitoring.

             For this reason, X11 forwarding is subjected to X11 SECURITY
             extension restrictions by default.  Please refer to the ssh -Y
             option and the ForwardX11Trusted directive in ssh_config(5) for
             more information.

リモートサーバーに接続されます。見た目は-Xオプションをつけないでssh接続をした時と一緒。あとは接続したターミナル上で、virt-managerコマンドを実行するだけ。

f:id:ytooyama:20170717212444p:plain:w360

これで冒頭のように見慣れた管理画面が開かれます。仮想マシンのコンソールも表示できます。

WindowsにはXmingというものがあるようです。そのうち試そうと思います。 http://d.hatena.ne.jp/marqut/20141230/1419923430

これで仮想マシンマネージャーを開くだけのためにVMLinuxを起動しなくても済むようになりました。ちなみにVPN越しでも割と使えますね。さすがにローカル上のVMを操作するのと比べると遅くなりますけど。

macOSの移行ウィザードでユーザーを移行したらVagrantがUIDのエラーでうまく動かなくなった場合の解決方法

vagrant statusとか、とにかくコマンドを実行するとエラーになってしまいました。 大ピンチです。

current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.

The UID used to create the VM was: 503
Your UID is: 501

検索すると、「.vagrant/machines/default/virtualbox/creator_uid」や「.vagrant/machines/default/virtualbox/id」にIDが書かれているので「Your UID is…」と書かれているIDに書き換えろーって話らしい。

qiita.com

stackoverflow.com

ただしそんなファイル、ないんですけどと言う場合は.vagrantと言うディレクトリーを削除してしまえば良いみたいです。このディレクトリーはVagrantfileを置いているディレクトリーごとにあるので、端末でls -laと実行して出てきたディレクトリーをrm -rf .vagrantと実行して削除すればOK。vagrantコマンドを実行すると再作成されるようです。

ちなみに先ほどのパスですが、Vagrantfileに複数のVMの情報を記述している場合はdefaultの部分が変わってきます。 例えば次のような記述がある場合はcent7n0とかcent7n1のように指定したエントリーの数だけディレクトリーが作られますので、個別にidを変えたい場合はそう指定します。正直ディレクトリーを削除して再作成してもらった方が良いと思います。

...
 config.vm.define :cent7n0 do |cent7n0|
  cent7n0.vm.box = "cent/7"
  cent7n0.vm.hostname = "cent0"
  cent7n0.vm.network "private_network", ip: "192.168.57.211"
 end

 config.vm.define :cent7n1 do |cent7n1|
  cent7n1.vm.box = "cent/7"
  cent7n1.vm.hostname = "cent1"
  cent7n1.vm.network "private_network", ip: "192.168.57.212"
 end
...

新しく買ったMacBook 2017 vs 持っているMacBook

f:id:ytooyama:20170710010647j:plain

古い世代とはいえ、Core i7とCore m3の比較なのであまり参考にならないと思いますが、同じバージョンのGookBench 4でCPUのベンチマークをとってみました。

結果はシングルコアは若干速く、デュアルコアはi7に及ばないという結果でした。当たり前です。コア数もスレッド数も半分ですから。詳しくは以下の結果を見て欲しいですが、VMWindowsを使う程度なら別に遅さも感じません。一つだけ言うなら、やはりType-CのUSB一つは不便なところでしょうか。明日帰りにビックカメラでType-Cで給電しながら使えるUSBのHubを買おう。

あれ、でもそれって一緒に買ったHub USB Type-C - Type-A変換コネクターが無駄になるんじゃ…

「grub2-mkconfig -o /boot/grub2/grub.cfg」が覚えられない件について

今の仕事は割とGRUBの設定を書き換えて再起動することが多いのですが、忘れがちな表題のコマンド。Ubuntuだと「update-grub」なのでわかりやすいですし、コマンド補完が効くので多分、「update」くらいまで打ってタブ補完すればコマンドを実行できます。一方、例えばCentOS 7とかFedoraとかはgrub2-mkconfigほげほげと長い。いろいろ考えたのですが、エイリアスで逃げることにしました。

aliasの永続化はbashの場合は以下のように。zshの場合は.zsh_aliasとか.zshrcに書けば良いらしいです。

# vi ~.bashrc
alias update-grub='grub2-mkconfig -o /boot/grub2/grub.cfg'

UbuntuのLXCコンテナーでサービスを動かす

Dockerでサービスを動かし、サービスを外部からアクセスする際の手段としてポートフォワードを使う方法があると思います。

runnable.com

qiita.com

じゃあ、これをLXD,LXCでやるとどうやるのという話ですが、lxcコマンドには特にそのようなオプションを指定するものはないようなので、次のようにiptablesで設定すれば良いようです。以下、Ubuntu 16.04.xでLXC,LXDを使う場合を例として説明します。

これくらいの方法、ドキュメント化されているだろうと思ったら全然見つからなかったのでまとめておきます。こういう話ってQiitaに書いたら喜ばれるんだろうか。週末書くかも。

サービスの起動設定

コンテナーはLXC、コンテナーホストの管理はLXDで行うために、LXDサービスを起動しておきます。

host# systemctl start lxd
host# systemctl enable lxd

初期設定

初めて起動する場合は次のように実行してください。詳細はこちら

host# lxd init

コンテナの起動

初回はデプロイ用のコンテナーイメージをダウンロードします。本例はmy-ubuntuという名前のコンテナーにTrustyをインストールします。

host# lxc launch ubuntu:14.04 my-ubuntu
host# lxc list
+-----------+---------+----------------------+------+------------+-----------+
|   NAME    |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------+------------+-----------+
| my-ubuntu | RUNNING | 10.251.33.235 (eth0) |      | PERSISTENT | 0         |
+-----------+---------+----------------------+------+------------+-----------+

コンテナにApache Webサーバーをインストー

lxc exec my-ubuntu bashと実行してコンテナーにログインしてから実行しても良いですが、次のようにコマンドを渡してホストからコンテナーを制御することもできます。

host# lxc exec my-ubuntu apt update
host# lxc exec my-ubuntu apt install apache2

iptablesの設定

ホスト上でポートフォワードの設定を行います。ホスト:50080にアクセスすると、コンテナーの80ポートにアクセスするように設定するには次のように実行します。Dockerでポートフォワードを設定するときと同様、ポート番号被りに注意します。「DYNAMIC AND/OR PRIVATE PORTS」を使うと良いでしょう。

host# iptables -t nat -A PREROUTING -p tcp -i enp0s5 --dport 50080 -j DNAT --to-destination 10.251.33.235:80
  • 上例「-i enp0s5」がNAT接続に使うNIC。外部と繋がっている側を指定
  • 上例「–dport 50080」が「Host IP:dport」で指定したポートでアクセスできるために必要な設定
  • 上例「–to-destination 10.251.33.235:80」がアクセスした時の実際の行き先

iptablesの設定をセーブ

iptablesの設定をセーブする。永続化したい場合は各自調べてください。

host# iptables-save

ブラウザーでアクセス

この時点で、http://<LXCHostのIPアドレス>:50080/でアクセスすればコンテナー上にインストールしたApache Webサーバーにアクセスできます。

では次に、PHPを追加してみましょう。

host# lxc exec my-ubuntu apt update
host# lxc exec my-ubuntu apt install php5

次のように実行して、テスト用のPHPスクリプトを作成します。

ログイン
host# lxc exec my-ubuntu bash
ファイル作成
my-ubuntu# echo "<?php phpinfo() ?>" > /var/www/html/test.php

ブラウザーhttp://<LXCHostのIPアドレス>:50080/test.phpにアクセスすると、PHPのテスト用スクリプトを表示できます。つまり、LXCコンテナーApache Webサーバー、PHPの環境を作れたというわけです。仮想マシンと比べてあっという間に構築できるのがコンテナーの魅力です。Dockerも良いですが、LXCも触ると楽しいですよ。

注意点

VirtualBox VMではちょっとうまく動きませんでした。KVMやESXi、VMware Workstation、VMware FusionParallels Desktopだとうまくいくと思います。私はParallels Desktop 12にUbuntu Server 16.04.2をインストールして試しました。もちろん、物理サーバーにLXC,LXD環境を作って、コンテナーを動かすのも同じように可能です。Ubuntu 16.04.xであればLXC,LXDはインストール済みです。