Adobe reader on Ubuntu18

参考

手順

Adobe Readerのインストール手順を記したブログ に記載の手順で基本的には問題ない。

1
2
3
4
$ sudo apt install libxml2:i386 gdebi-core 
$ cd ~/Downloads
$ wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb
$ sudo gdebi AdbeRdr9.5.5-1_i386linux_enu.deb

ファイラから開くときのデフォルトアプリの設定の参考にした情報 を参考に設定する。

1
$ sudo vim /etc/gnome/defaults.list

変更内容は以下の通り。

1
2
3
4
5
6
7
8
9
10
11
--- /etc/gnome/defaults.list.2018121101	2018-12-11 22:42:03.566334756 +0900
+++ /etc/gnome/defaults.list 2018-12-11 22:42:15.970075520 +0900
@@ -5,7 +5,7 @@
application/msword=libreoffice-writer.desktop
application/ogg=rhythmbox.desktop
application/oxps=evince.desktop
-application/pdf=evince.desktop
+application/pdf=acroread.desktop
application/postscript=evince.desktop
application/rtf=libreoffice-writer.desktop
application/tab-separated-values=libreoffice-calc.desktop
共有

onedrive for linux

参考

手順

インストール

1
2
3
4
5
6
7
8
9
$ sudo apt install libcurl4-openssl-dev libsqlite3-dev
$ curl -fsS https://dlang.org/install.sh | bash -s dmd
$ source ~/dlang/dmd-2.083.1/activate
$ cd ~/Sources
$ git clone https://github.com/abraunegg/onedrive.git
$ cd onedrive
$ source ~/dlang/dmd-2.083.1/activate
$ make
$ sudo make install

一部同期の設定

1
2
$ mkdir -p ~/.config/onedrive
$ vim ~/.config/onedrive/sync_list # 中にディレクトリを並べる

(再)同期

1
$ onedrive --synchronize --resync

その後、初回同期時はウェブ認証が走るので従う。 白い画面がブラウザで現れたら、そのURLをコピーしてコンソールにペーストし、実行する。

アンインストール

1
$ sudo make uninstall

共有

BlazeItの論文

参考

論文の概要

動画の活用への期待が高まっている?

動画のボリュームが増し、分析者が動画分析に興味を持っている。

  • 交通meter設定の計画、都市計画。
    • 車の行き交うのを観測し、台数を算出する
  • 自動車会社
    • ペデストリアンの感想? ★要確認

これらを人手で確認するのは費用対効果が悪い。

既存手法としては、物体検知手法が挙げられる。

課題感

深層学習を使ったビジュアルデータの処理において、 GPUを使ったとしても高いfpsでの実時間処理が難しい。 state-of-artな物体検知手法Mask R-CNNですら、3fpsである。

またそれらの処理を実装するときには低レベルのライブラリ(例:OpenCV、Caffe2、Detectron)を使って 複雑な実装を施さないといけない。

なお、ビデオ処理の最適化の既存の研究はあるが、 それらは単一の機能を最適化するものである。 BlazeItは、Declarativeなクエリ言語を使って処理を記述し、さらに 最適化された処理のパイプラインを生成する。

BlazeItの構成

  • FrameQL
  • 最適化と実行エンジン
    • Aggregation
      • 物体検知を行うサンプリングレートを指定可能
      • 特化したNNを使う
      • control variateを使う ★要確認
    • Scrubbing
      • 稀に登場する物体を効率的に検知するため、 特化したNNのconfidence scoreを使う。
      • サンプリングにバイアスをかける
    • Selection
      • クエリの内容に応じていくつかのフィルタリングを組み合わせる
      • NoScopeラベルベース、コンテンツベース、スキップ(サブサンプリング)、 クロッピング

ユースケース

BlazeItは探索的なクエリに注力。 ★重要

  • aggregate: 車の数を数える、など
  • 探す: 動画の中で鳥が沢山飛んでいる瞬間を探す、など

特に動画が多く、全部に対して物体検知を行うのは非現実的なケースが適切。

ただし一部のデータに関しては、学習データとしてラベル付けされていることを前提とする。 ★重要

具体例:

  • 都市計画
    • 交通状況の観測と計画
    • 例えばバスX台、車Y台がいるタイミングを見つける、など
  • 自動運転
    • 黄色信号時の状況把握
    • 例えば黄色信号で通行者がX人いるタイミングを見つける、など
  • ストア計画
    • 店舗を区分けし、どの商品が人気なのか人の動向から把握する
  • 鳥類の研究者
    • 餌やりの状況把握

システム概要

設定

設定可能なコンポーネントは以下の通り。

  • 物体検知
  • フレーム跨りの物体検知
  • UDF

例えばフレーム跨りで物体を検知するときに、車のナンバープレートを使う、など 独自のロジックの差し込みが可能。

フィルタ

BlazeItのフィルタは確率的動作。 特化されたNNは、すべてのフレームにおいて精度が高いわけではない。 そこで、オプティマイザはエラーレートを参考にしつつプランを立てる。

特化NN

大きなNNの代わりに用いることができる単純化されたNN。 高速な計算が特徴。 既存研究ではバイナリ検知が主だったが、BlazeItの研究では カウントや多クラス分類に発展させた。

フィルタのブートストラップ

少量のラベル付け済みデータを用いる。

現時点での制約

  • モデルドリフト:動画の傾向が途中で変わる場合、モデルの再トレーニングが必要
  • ラベル付け済みデータセット:最初に特化NNをトレーニングするためのデータが必要
  • 物体検知が物体検知手法に依存:もし特別なことをさせたいならUDFを使用

FrameQL

ビデオを関係とみなし、selection、projection、aggregation(など関係に対するオペレーション)を可能とする。 テーブルのようなスキーマを提供することで、背景となる深層学習等の技術の専門家である必要なく、SQLが分かれば処理を記述可能とする。 また物体検知やフレーム間でのトラッキングロジックは、ユーザが独自のものを指定可能。 BlazeItはそれに応じて、スキーマを選択する。

シンタックスシュガーがあるが、それはBlinkDBと同じようなもののようだ。 ※BlinkDB由来、ということでUCBの流れを改めて感じる…

FrameQLのスキーマ

  • timestamp: オブジェクトのタイムスタンプ
  • class: オブジェクトタイプ(車、バス、など)
  • mask: オブジェクトの場所を表すポリゴン
  • trackid: 時間をまたいでオブジェクトを追跡するID
  • content: ポリゴンの中のピクセル
  • features: 物体検知手法により出力された特徴

FCOUNT

フレーム内に現れるオブジェクトの出現割合から算出される出現率?

いくつかの例

論文上はいくつかのFrameQLの例が載っている。

クエリ実行の概要

BlazeItにはFrameQLに基づいて処理を実行する際に最適化が行われる。 例えば、物体検知は計算コストが高いので、できるだけ減らそうとする。

aggregation、scrubbing、content-based selectionに関する最適化。

aggregationの最適化

最適化の方向性は以下の3点

  • トラディショナルなAQP
  • 特化NNを用いて書き換え
  • 特化NNを用いたControl Variate

BlazeItは最初に最適化の種類を特定する。

まず学習データが十分にあるかどうか。もしなければAQPを用いる。 またアダプティブなサンプリング手法も用いる。(例: オンラインアグリゲーション、BlinkDB)

十分にデータがあれば特化NNを用いる。

サンプリングについて補足

所定の(詳しくは論文参照)サンプル数から始め、 所定の基準に達するまでサンプル数を増やしていく。

Control Variateについて補足

Control Variateについては、 Control Variateについての解説記事 などを参照。

Optimizing Scrubbing Queriesについての補足

分析者はレアなシーンこそ検索したくなるものだが、 そうするとすべてのフレームに対し、物体検知をしないといけない。(そしてそれは遅い)

「レアイベントシミュレーション」と特化NNを組み合わせる。

複数の対象(例:バスと車)を検知する特化NNを それぞれ 用いる。 もし「バス1台、車3台」のような条件の時にはアンドをとって用いる。

コンテントベースのSelection

フィルタを使って検知処理を動かす前にフィルタする。 ラベルベース、コンテントベース、テンポラル、スペーシャル。

BlazeItはクエリからどのフィルタを使うべきかを推測する。 またユーザの期待するフレーム数に応じて、サンプリングレートを変える。

実装

既存のプロダクトを活用して作られている箇所とスクラッチで実装した箇所があるようだ。

  • コントロールプレーンはPython
  • NNではないフィルタはC++
  • PyToarchを学習や評価に利用
  • 物体検知にはFGFAを利用
    • MXNet v1.2、Mask R-CNNを利用
  • ビデオはOpenCVで走査

その他調べておきたいこと

  • NoScope
  • 物体検知関係の研究(YOLOv2、MS-COCO、Mask R-CNN、…)
共有

TFoSparkのTFManager

概要

以下の通り、マルチプロセッシング処理におけるプロセス間通信を担うマネージャ。

tensorflowonspark/TFManager.py:15

1
"""Python multiprocessing.Manager for distributed, multi-process communication."""

キューやキーバリューの辞書を管理。 キューは、SparkのExecutorとTFのWorkerの間の通信に用いられるようだ。

実装の確認

また以下の通り、BaseManagerを継承している。

tensorflowonspark/TFManager.py:14

1
class TFManager(BaseManager):

startメソッド

startメソッドではリモートの接続を受け付けるかどうかを確認しながら、 BaseManager#startメソッドを使ってマネージャ機能を開始する。

tensorflowonspark/TFManager.py:60

1
2
3
4
5
if mode == 'remote':
mgr = TFManager(address=('', 0), authkey=authkey)
else:
mgr = TFManager(authkey=authkey)
mgr.start()

connectメソッド

アドレスと鍵を指定しながらTFManagerに接続する。

tensorflowonspark/TFManager.py:81

1
2
3
m = TFManager(address, authkey=authkey)
m.connect()
return m

共有

TensorFlowOnSparkの例を確認する

estimator

オリジナルのcnn_mnist.pyをTensorFlowOnSparkで動くように修正したもののようだ。

サンプルは、mnist_estimator.pyのみ。 学習・評価を実行する。

保存されたMNISTのデータを各ワーカが読んで学習する。

mnist_estimator.pyのポイント

データロードの箇所は以下の通り。 学習データをすべて読み込むようになっていることが分かる。

examples/mnist/estimator/mnist_estimator.py:120

1
2
3
4
5
6
# Load training and eval data
mnist = tf.contrib.learn.datasets.mnist.read_data_sets(args.data_dir)
train_data = mnist.train.images # Returns np.array
train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
eval_data = mnist.test.images # Returns np.array
eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)

モデルの定義の箇所は以下の通り。 モデル定義は実態的にはcnn_model_fn関数が担っている。 当該関数の中でCNNの層定義が行われている。

examples/mnist/estimator/mnist_estimator.py:127

1
2
mnist_classifier = tf.estimator.Estimator(
model_fn=cnn_model_fn, model_dir=args.model)

学習と評価の箇所は以下の通り。 入力データ用の関数を引数に渡しつつ実行する。 (これは各ワーカで動くところか)

examples/mnist/estimator/mnist_estimator.py:158

1
2
3
train_spec = tf.estimator.TrainSpec(input_fn=train_input_fn, max_steps=args.steps, hooks=[logging_hook])
eval_spec = tf.estimator.EvalSpec(input_fn=eval_input_fn)
tf.estimator.train_and_evaluate(mnist_classifier, train_spec, eval_spec)

spark

mnist_spark.pyのポイント

PySparkのアプリケーションとして、TensorFlowOnSparkを実行するアプリケーションである。

入力データの形式は、org.tensorflow.hadoop.io.TFRecordFileInputFormat(以降、TFRと呼ぶ)とCSVの両方に対応している。 TFRの場合は、入力されたデータをレコード単位でNumpy Array形式に変換して用いる。 CSVの場合、配列に変換する。

Executorで実行するメイン関数は、 mnist_dist.map_fun である。

mnist_dist.pyのポイント

map_fun関数の定義がある。 パラメータサーバ、ワーカそれぞれのときに実行する処理が定義されている。

パラメータサーバのときは、TensorFlow Serverのjoinメソッドを呼ぶ。

ワーカのときはデバイスの指定、TensorFlow用の入力データの定義、層の定義、損失計算等が行われる。 なお学習と予測のそれぞれの動作が定義されている。

予測の時は、DataFeed#batch_resultsメソッドを使って、予測結果が戻り値のRDD向けにフィードされるようになっている。

tf

他のサンプルとは独立したものかどうか要確認。

examples/mnist/tf/mnist_spark.py

READMEに書かれた最初のサンプル。 SparkContextを定義し、TFCluster#runメソッドを呼び出す。 runに渡されるTensorFlowのメイン関数はmnist_dist.map_funである。

map_funのポイント

_parse_csvメソッドと_parse_tfrメソッドはそれぞれCSV形式、TFR形式のデータを読み、 ノーマライズし、画像データとラベルのペアを返す。

build_modelメソッドでモデルを定義する。

パラメータサーバとして機能するExecutorではTensorFlow Serverのjoinメソッドを呼び出す。

ワーカとして機能するExecutorは以下の流れ。

  • 入力データのロードと加工
  • モデルのビルド
  • TensorFlowまわりのセットアップ(Saverのセットアップなど)
  • 予測の時
    • 出力ファイルオープン
    • 予測結果などの出力
    • 出力ファイルクローズ
  • 学習の時
    • 定期的に状況をプリントしながら学習実行
    • タスクインデックスが0の場合のみ以下を実行
      • プレイスホルダ設定
      • モデルビルド
      • チェックポイントからの復元
      • エクスポート
  • ワーカごとにdoneファイルを生成(完了確認のため)

examples/mnist/tf/mnist_inference.py

TFClusterを使わず、Executor内でシングルノードのTFを使って予測結果を作る例。

Executor内で実行される処理

  • シングルノードのTFのセットアップ
  • モデルロード
  • 入力のための各種手続き(TFRecordを読むための関数定義、入力データの定義など)
共有

SX-AuroraやFrovedis

参考

SX-Auroraの物理構成の解説 記事に記載された感想の抜粋

SX-Auroraの物理構成の解説 に記載されていた考察を転記する。

一方、DGEMMではSX-Aurora TSUBASAはXeonの1.2倍程度の性能であり、V100が3.5程度であるのに比べて性能が低い。これはV100の方がピークFlopsが高いことが効いているのではないかと思われる。一方、Perf/WではSX-Aurora TSUBASAやV100は高い効率を示している。これは演算性能の割に消費電力が低いためと思われる。

まとめであるが、SX-Aurora TSUBASAはAuroraアーキテクチャに基づく新しいスパコンの製品ラインである。従来のように独自のプロセサを作るのではなく、x86/Linuxの環境にベクタ処理を付加した形になっている。

チップサイズの比較はともかく、NVIDIAのV100を16個搭載するDGX-2は約40万ドルで、V100 1個当たり250万円程度である。これに対して、SX-Aurora TSUBASAは、NECの発表では1VEのA100が170万円~、64VEのA500が1億2000万円~となっており、VE 1個あたり200万円弱である。これだけを見ると、NECの方が2割程度安いことになる。

しかし、これはいわゆる定価であり、実際のビジネスでは、これからどれだけ値引きされるのかは分からない。 Post-K(ポスト「京」)のような国家プロジェクトの無いNECがスパコンを開発するのは大変であるが、SX-Aurora TSUBASAはx86サーバにベクタエンジンを付けるという面白い切り口で挑んでいる。成功を祈る。

NECとホートンワークスの協業 記事でのポイント

現在はYARN対応がポイントのようだ。 共同研究成果は、OSSとして公開するつもりのようだ。

共有

Python3をHDP2.6のPySparkで用いたときのエラー

参考

メモ

以下のようなコマンドでPython3のipythonをドライバのPythonとして指定しながら起動したところ、 エラーを生じた。

1
2
3
4
5
6
$ pyspark --master yarn --conf spark.pyspark.driver.python=ipython

$ ipython --version
7.1.1
$ python --version
Python 3.6.7 :: Anaconda, Inc.

エラー内容は以下の通り。

1
2
3
4
5
6
7
8
9
10
11
18/11/18 12:30:09 WARN ScriptBasedMapping: Exception running /etc/hadoop/conf/topology_script.py 192.168.33.83
ExitCodeException exitCode=1: File "/etc/hadoop/conf/topology_script.py", line 63
print rack
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(rack)?

at org.apache.hadoop.util.Shell.runCommand(Shell.java:954)
at org.apache.hadoop.util.Shell.run(Shell.java:855)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1163)
at org.apache.hadoop.net.ScriptBasedMapping$RawScriptBasedMapping.runResolveComman
(snip)

Hortonworksのコミュニティによる情報によると、Python2系しか対応していないというが、本当かどうか確認が必要。 同様のことを指摘している記事として2to3を用いる方法の記事が挙げられるが、そこでは

  • /usr/bin/hdp-select
  • /etc/hadoop/conf/topology_script.py

の2ファイルがPython2でしか動作しない内容で記載されているようだ。 ためしに/usr/bin/hdp-selectをのぞいてみたら、確かにPython2系に限定された実装の箇所がチラホラ見受けられた。

Sparkでのvirtualenv対応

SPARK-13587: Support virtualenv in PySparkでHortonworkの人中心に議論されており、 ターゲットバージョンは3.0.1とされている。

HortonworkによるSparkのvirtualenv対応に記載の方法は、Hortonworksの独自拡張なのか。

共有

AmbariのAgent登録時にSSL関連のエラー

参考

メモ

基本的に、 解決手段の記載された記事 の手順で問題なかった。

共有

vagrant-libvirt on Ubuntu18

参考

手順

必要パッケージのインストール

最初に手順通り、vagrantをインストールしておく。 vagrant-libvirt によると、upstreamを 用いることが推奨されているので、ここではあえて1.8系を用いることにする。

Vagrantのプラグイン追加

1
2
3
4
$ sudo apt install gdebi  # 念のため依存関係を解決しながらdebをインストールするため
$ cd ~/Downloads
$ wget https://releases.hashicorp.com/vagrant/1.8.7/vagrant_1.8.7_x86_64.deb
$ sudo gdebi vagrant_1.8.7_x86_64.deb

続いてソースリストでdeb-srcを有効化する。 diffは以下の通り。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$ sudo diff -u /etc/apt/sources.list{,.2018111701}
--- /etc/apt/sources.list 2018-11-17 21:06:52.975641015 +0900
+++ /etc/apt/sources.list.2018111701 2018-11-17 21:06:29.396143241 +0900
@@ -3,20 +3,20 @@
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://jp.archive.ubuntu.com/ubuntu/ bionic universe
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic universe
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic universe
deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates universe
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates universe
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
@@ -24,9 +24,9 @@
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://jp.archive.ubuntu.com/ubuntu/ bionic multiverse
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic multiverse
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
@@ -34,7 +34,7 @@
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://jp.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
-deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
+# deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
@@ -44,8 +44,8 @@
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
-deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
+# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
-deb-src http://security.ubuntu.com/ubuntu bionic-security universe
+# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
-deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse
+# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse
1
2
3
4
$ sudo apt update
$ sudo apt-get build-dep vagrant ruby-libvirt
$ sudo apt-get install qemu libvirt-bin ebtables dnsmasq
$ sudo apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev ruby-dev

Vagrantのプラグインを追加する。

1
$ vagrant plugin install vagrant-libvirt

Vagrantfileの作成

続いて、以下のようなVagrantfileを用意し、vagrant upする。

※この時点のVagrantfileでは正常に動かないので注意。ここでは時系列のままに記載している。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

# config.vm.provider :virtualbox do |vb|
# vb.auto_nat_dns_proxy = false
# vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
# vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
# end

config.vm.define "hd-01" do |config|
config.vm.box = "centos/7"
config.vm.network :private_network, ip: "192.168.33.81"
config.vm.hostname = "hd-01"
end

config.vm.define "hd-02" do |config|
config.vm.box = "centos/7"
config.vm.network :private_network, ip: "192.168.33.82"
config.vm.hostname = "hd-02"
end

config.vm.define "hd-03" do |config|
config.vm.box = "centos/7"
config.vm.network :private_network, ip: "192.168.33.83"
config.vm.hostname = "hd-03"
end

config.vm.define "hd-04" do |config|
config.vm.box = "centos/7"
config.vm.network :private_network, ip: "192.168.33.84"
config.vm.hostname = "hd-04"
end

end

ストレージプールdefaultの不在に関連したエラー

このとき、

1
There was error while creating libvirt storage pool: Call to virStoragePoolDefineXML failed: operation failed: Storage source conflict with pool: 'images'

のようなエラーが生じたが、これは デフォルトプールに関するエラーの情報 に掲載の課題のようだ。 libvirtでストレージプールを作成 を参考に、ストレージプールを作成する。

1
2
3
4
$ sudo virsh pool-define-as default dir --target /var/lib/libvirt/default
$ sudo virsh pool-build default
$ sudo virsh pool-start default
$ sudo virsh pool-autostart default

Vagrant BoxのダウンロードURLに関連したエラー

つづいて、vagrant up --provider=libvirtしようとしたら、以下のエラーが生じた。

1
2
3
4
5
6
7
8
The box 'centos/7' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/centos/7"]
Error: The requested URL returned error: 404 Not Found

VagrantのダウンロードURL関連エラーの情報 に記載の通り、いったん

1
Vagrant::DEFAULT_SERVER_URL.replace('https://vagrantcloud.com')

の記載をVagrantfileの先頭に記載する、というワークアラウンドを取り入れることにした。

共有

KVM on Ubuntu18

参考

手順

パッケージインストール

1
$ sudo apt install qemu-kvm libvirt-bin
1
$ sudo adduser $USER libvirt

なお、公式ドキュメント上ではlibvertdグループとされていたが、注釈にあった

1
In more recent releases (>= Yakkety) the group was renamed to libvirt. Upgraded systems get a new libvirt group with the same gid as the libvirtd group to match that.

に従い、libvertグループを使用した。

1
$ sudo reboot

イメージの準備

今回は18.04LTSを用いることとする。

1
2
3
$ cd ~/Downloads  # ディレクトリがなかったら作成
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases/18.04/ubuntu-18.04.1-desktop-amd64.iso
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases/18.04/ubuntu-18.04.1-live-server-amd64.iso

インストール

1
$ sudo apt install virtinst

ネットワークインストールの方法ネットワーク経由でインストールすることにした。

1
2
3
4
5
6
7
8
9
10
11
$ sudo virt-install \
--name ubuntu1804 \
--ram 1024 \
--disk path=/var/lib/libvirt/images/test.img,bus=virtio,size=15 \
--vcpus 2 \
--os-type linux \
--network default \
--graphics none \
--console pty,target_type=serial \
--location 'http://jp.archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'

参考までにイメージからインストールするのは以下の通り。(未動作確認)

1
2
3
4
5
sudo virt-install -n test -r 512 \
--disk path=/var/lib/libvirt/images/test.img,bus=virtio,size=4 -c \
~/Downloads/ubuntu-18.04.1-live-server-amd64.iso --network network=default,model=virtio \
--graphics none \
--extra-args 'console=ttyS0,115200n8 serial'

ゲスト側のconsole設定

virsh console でコンソールに接続できるよう、SSHで接続して設定する。 VMのIPアドレス確認 を参考に、IPアドレスを確認する。

1
2
3
4
~$ sudo virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
2018-11-17 03:08:52 52:54:00:b0:68:26 ipv4 192.168.122.193/24 ubuntu1804 ff:32:39:f9:b5:00:02:00:00:ab:11:97:79:8b:63:02:9c:d8:07

ゲストOSにおけるコンソール設定 に従って設定する。

まず /etc/default/grub を修正する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ sudo echo > /etc/default/grub << EOL
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
#GRUB_TERMINAL=serial
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
EOL

grubの設定ファイルを再生成する。

1
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

rebootする。

1
$ sudo reboot

reboot後にvirsh console <VM名>でアクセスすればコンソールに接続できる。 抜けるときは、Ctrl + ]もしくはCtrl + 5。

共有