Ubuntu 16.04 LTSにCSPをインストール

ちょいとwineに関する話題が出たのでUbuntu 16.04 LTS上にCLIP STUDIO PAINTをインストールに挑戦してみました。

wine上での動作は対象外・ライセンスの許可範囲外となります。利用に関しては自己責任でお願いします。

結論を先に書くと、セットアップは完了するのですが筆跡が何も描画されないという困った状況でした。WineHQには動作報告があるようなのですがVMWare Fusion上で動かしているのが原因かもしれません。

wineの導入

Ubuntu自体のリポジトリにもwine 1.6が含まれているのですが、ここではwinehqからstableをインストールします。

英語版のCLIP STUDIO PAINTをダウンロード

CLIP STUDIO PAINTの日本語版を使用すると、日本語で表示されている箇所が正常に表示されません。

何が書いてあるか判別出来ないと「OK」/「Cancel」のボタンを押すことすらままなりませんので、ここでは英語版のCLIP STUDIO PAINTをインストールします。

exeを実行するには以下の様に指定します。

インストールが正しく完了すると、デスクトップ上にアイコンが表示されますので、そこから実行可能になります。

と…インストールは出来たものの問題が

見た目は正常に起動している様にみえるのですが、手元の環境では描画する事が出来ませんでした。VMWare Fusionで試している影響かと思い、open-vm-toolsを追加で導入してみたり、OpenGL Supportを切ってみたりしましたが特に何も変わらず…

Cephをセットアップしてみる

Ceph

名前しか知らなかったのですが、まずはインストールしてみる事にしました。

.

導入方法について(環境はVMWare Fusion上のUbuntu 16.04 LTEを使用)

簡単なインストール方法はCephのドキュメントページに記載されているのですが、手順通りに行うと本当に”インストールだけ”しかしません。

単なるソフトウェアであればインストール後にどうするか考えれば良いですが、ハードウェアやネットワーク構成とセットになっている場合は、ある程度見積もりや構成を考えておく方が良かったり。

Cephを動作させる為に必要なサービスは以下の二つ。

Monitor Daemon(mon)

他のMonitorやObject Storage Daemonと通信し、死活監視や対象データの所在を管理する。複数立ち上げて冗長性を持たせる事が可能。

Object Storage Daemon(osd)

ローカルにあるストレージを管理し、実際のデータ送受信を行うサービス。物理的なストレージにつき一つ必要となる。データとジャーナル情報を個別に指定する事も可能。

インストール前に意識しておくべき点としては、まず物理ディスクをどの様に接続して管理するかという事になります。

実験としては小さな構成として以下の様にしてみました。

  • ceph-mon  (172.16.2.32)
    • cephの監視用
  • ceph-osd01 (172.16.2.33)
    • /dev/sdb1を/var/local/volume_01にマウント
  • ceph-osd02 (172.16.2.34)
    • /dev/sdb1を/var/local/volume_01にマウント

インストール方法

モニターの初期化

基本はCeph Document > Installation (Quick)の通りに行います。

事前にceph-mon上で、SELinuxの無効化・iptablesのポート解放をしておきます。

ceph-deploy installを使用する場合は、Python環境も必要となります。

更に、それぞれのサーバーにceph管理者(ここではceph-master)を作成しておく必要があります。

(注意・Ubuntu 16.04 LTEのリポジトリから入手出来るcephはクラスター指定が出来ずceph固定となる様です)

カレントフォルダにceph.confが生成されるので、以下の内容を追加(目的とネットワーク環境で記述内容は異なります)

記述したら、それぞれの環境にcephのインストールを行います。

ストレージの追加

ブロックデバイスの使用

基本はこれだけですが、環境によって/etc/ceph/ceph.confに以下の設定が必要となります。

.

分散ファイルシステム

思うところあって、分散ファイルシステムについて色々調べて見ました。

色々と言いながら、調べたのは以下の三種類だけですけど…

GlusterFS

マスターサーバーが不要な分散ファイルシステム。

RAIDのような考え方でファイルが管理・配置される。

Ceph

Monitoring Daemon(MON)とObject Storage Daemon(OSD)の設置が必要。

管理対象のストレージに多彩なアクセス手段を提供する。

オブジェクトストレージとして使用する場合は、Amazon S3互換のAPIを使用することも可能。

Lustre

Meta Data Server(MDS)とObject Storage Service(OSS)の設置が必要。

HPC環境での実績があるシステム。

パッケージの取得はintelのHigh Performance Data Divisionから。なお、Ubuntu用のパッケージはprecise(12.04LTS)までしか用意されていない。

 

.

種類を列挙しようとすると他にもあるけど、何となく良さそう(Redhatが持っている、HPC環境で実績あり)に思えたのは上記の三種類。

それにしてもDFSって情報が少ない…

Apache Spark 2.1.0(7)

ファイル監視によるSpark Stream。

ストリーム生成側

以下の例では#NANOHAが含まれるツイートを取集。

(#NANOHAでツイートが拾えない場合は適当なキーワードに変更してください。)

ファイルを使用するストリームでは、Spark側が監視しているフォルダに直接書き込まず、一旦別の場所に作成してから監視下のフォルダに移動させる必要があります。

ストリーム取得側

フォルダに格納されたjsonファイルを読み込んで、メモリ内にaggtableを生成・SparkSQLでデータフレームを生成。

Spark Streamを使用する場合は、生成したデータストリームをstartで開始させておくと、Spark側がメモリ内テーブルを更新してくれます。

Apache Spark 2.1.0(6)

Spark Streaming処理のデモ

ストリーム生成側

ランダムで「なのは」「フェイト」「はやて」の文字列を戻し続けるだけのサーバープログラム。

Apache Streamは改行コードまでが取り込み単位なので、データ終端として改行コードが必要です。

ストリーム取得(Spark Streaming)側

実行結果

sample_5_server.py を実行してからsample5_clinet.pyをSparkで実行すると以下の様な表示がコンソールに出力されます。

単純にカウントしたものを表示させているだけです。

Apache Spark 2.1.0(5)

やる気の感じられないサンプルなのは、動作メモのつもりで作成しているため…

recommendation

naive beyes

 

Apache Spark 2.1.0(4)

SparkはCluster環境でこそ本領を発揮するのですが、そういった環境はなかなか用意するのが手間なので、試しにDocker化してみました。

雰囲気ぐらいは確認出来るかと…

Dockerfileはsingularities/sparkを手本にしています。

.

masterとworkerをそれぞれの実行はこんな感じで。

 

Apache Spark 2.1.0(3)

spark-submit時にスクリプトにコマンドライン引数を渡す方法。

sys.argvに普通に入っていますので、argparseモジュールを使用したり出来ます。

Pythonでの処理方法と同じです。

 

Apache Spark 2.1.0(2)

前回のデータを使用して、もう少しそれっぽい物を。

やっている事自体は何も中身がないのですけど。

SQLの一つ下の階層で記述している気分を味わえます。

SparkからのAmazon S3アクセス

s3へのアクセス方法にはs3, s3a, s3nの三種類が存在していて、それぞれ

  • s3 … s3をブロックデバイスとしてアクセス。
  • s3a … Amazon Web Servicesのライブラリ経由のアクセス。
  • s3n … 独自実装によるアクセス。

大抵はs3aが使用できれば事足りる様な気がしています。

実行する時にpackagesを指定。

 

NFSの設定方法

Apache Sparkをクラスタモードで使用する際に、お手軽な方法なので。

内容はubuntuのサーバーガイドほぼそのまま。

サーバー側の設定

/etc/exportsに公開するフォルダとアドレスを設定

クライアント側の設定

/etc/fstabに記述する場合

 

Apache Spark 2.1.0(1)

今更ながらSparkを使い始めてみました。

環境はubuntu 16.04.2 LTS, macOS Sierra 10.12.3を使用しています。

Sparkのインストール

ダウンロードはウェブサイトからビルド済みイメージを取得して、任意の場所に展開するだけです。

環境にあわせたものを用意する必要がありますが、何もないところに導入する場合であれば、特に何も考えずにspark-2.1.0-bin-hadoop2.7.tgzを選択します。

sparkの動作にはjava(とPython)が必要なのでインストールします。

これでひとまず使用可能になります。

spark-shell

pyspark

試験動作

動いているかわからない為、適当なデータを使って検索して見ます。

試しに魔法少女リリカルなのはINNOCENTのカード一覧(抜粋)を用意して見ました。

nanohain_cards.zip

idx, cost, charaname, charagroup, dressがjson形式で格納されています。

以下の形式で保存されています。(実際には1レコード1行)

カード枚数とキャラクター毎の枚数を計算

集計結果が画面に表示されるはず。

ファイルに書き出したい場合は二種類の方法があります。

Spark内蔵機能による出力

この方法が本来の使用方法となります。出力先もローカル以外にhdfsやAmazon S3を指定することが出来ます。

欠点というわけではありませんが、このまま実行すると分散処理の都合上複数のファイル(標準設定だと200)が出力されてしまいます。ひとつにまとめたい場合はrepatitionを使用する事で分割数を抑制することが可能です。

ただ、データが一箇所に偏ってしまうと、せっかくの分散処理が活用出来ませんので注意が必要です。

Pythonモジュールによる出力

Pythonモジュールを使用した方法だとこちら。

collectを呼び出すと、分散処理内容がmaster側に集約され、リストとして扱えますので、あとは好きなように処理が可能です。

ただし巨大なデータを扱っている場合、masterのメモリに収まりきらない場合があります。

Sparkクラスタの構成

Sparkでクラスタを構成するには三種類の方法があります。

  • Sparkだけで構成する方法
  • Yarnを使用する方法
  • Mesosを使用する方法

クラスタ内のPCリソースを100%占有してよいのであれば、Sparkだけで構成する方法が最も容易です。

Sparkのみでクラスタを構成

クラスタを構成するにはSparkをインストールしてmasterとslaveの役割を与えるだけです。

複数台をまとめて実行させたい場合は、

まず、/opt/spark/spark-2.1.0-bin-hadoop2.7/conf/spark-env.shを作成し、

  • SPARK_MASTER_HOST
  • SPARK_MASTER_PORT

を設定します。

次に/opt/spark/spark-2.1.0-bin-hadoop2.7/conf/slavesを作成し、ホスト名称、またはIPアドレスを列挙しておきます。

正しく設定されていれば以下のコマンドでslave全てを開始できます。

やっていることは、slavesに記載されているサーバーにsshでログインしてstart-slaveをしているだけなので、この方法を使用する場合はssh実行時にパスワードを不要(具体的には公開鍵による認証)にしておく必要があります。

画面解像度の追加方法

Ubuntu上でXを使用する際、目的の画面解像度が選択できない場合、以下を参考にして画面解像度を追加可能。

解像度の確認方法

解像度の追加方法

{{output}}の指定は、解像度の確認に出力したものを指定します。

Apache MesosをAzureに導入

Apache Mesosを試してみたくなり、Ubuntu 14.04にApache Mesos 1.0.0を導入してみました。

なお導入作業はMicrosoft Azure上で行っていますが、Ubuntu 14.04であれば他の環境でも再現可能かと思います。

Azure Virtual Machineの作成

サイズはStandard DS2 v2で作成。

Azureでは仮想マシンの作成方法に、「仮想マシン(クラシック)」と「Virtual machines」があります。

単純に仮想マシンを構築するだけの場合は、両者には違いがそれ程無いように見えますが、管理をしようと思うとかなり異なってきます。

今回はリソースマネージャによる管理を行う事にしました。

インストール作業

ウェブサイトにあるGetting Startedを素直に実行するだけですが0.28.2をビルドしている時にcgroupとlinux-toolsが不足していたような気がしたので、それらも追加インストールしておきます。

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

ソースを取得して展開

ビルドとテスト

ビルド後のチェックが通っていれば完成しています。

動作テスト

インストール

インストールをしなくても、前述した動作テストと同じ事をすればひとまず使用する事は出来ますが、インストールする事でmesosコマンドによる管理が行える様になります。

ビルド前のconfigure時にprefixを指定しなかった場合は、以下の場所にmesosが展開されます。

  • /usr/local/lib … mesosライブラリ
  • /usr/local/lib/mesos/modules … mesosが使用するライブラリ
  • /var/local/etc/mesos … mesosの設定スクリプト
  • /usr/local/sbin … mesosの実行スクリプト
  • /usr/local/share/mesos … WebUI用のファイル等

インストール後の設定

インストールしただけでは、まだ必要な設定がされていない為、環境にあわせて設定を行います。

まず/usr/local/libをライブラリ検索パスに追加します。

mesos-master用の設定
  1. /usr/local/etc/mesos にあるmesos-master-env.sh.templateをコピーし、mesos-master-env.shを作成します。
  2. mesos-master-env.shを開き、必要な設定値を追記します。

mesos-agent用の設定
  1. /usr/local/etc/mesos にあるmesos-agent-env.sh.templateをコピーし、mesos-agent-env.shを作成します。
  2. mesos-agent-env.shを開き、必要な設定値を追記します。

起動方法

起動は以下の様に行います。

幾つかのコマンドについてはpythonで実装されているので、PYTHONPATHにmesos関係のモジュールが配置されている場所を追加する必要があります。

Azure Resource Explorerを使用した複製

ビルドしたmesosはmasterとagentの両方ですので、起動するスクリプトでどちらにもなれます。

mesosは一台の環境内にmaster(agentを監視するサーバー)とagentを構成する事も出来ますので、mesos自体のテストをする事が出来るのですが、ここでは複数台の構成を行います。

 

複数台構成するには、個々にVirtual Machinesを立ち上げて前述したビルドを行えば良いのですが、Azure Resource Explorerを使用する事で容易に複製が可能です。

複製作業

注意:以下の作業を行うと対象のVMは起動させる事が出来なくなります。

  1. 対象のVMを停止させる。
  2. Azure Resource Explorerを開き、先程作成したVirtual Machineを探す。
  3. Azure Resource Explorerのモードを”Read/Write”に変更する。
  4. generalizeをクリック。
  5. captureに必要な項目(vhdPrefix, destinationContainerName, overwriteVhds)を記入。
  6. captureをクリック。

.

複製完了後に以下の手順でVirtual Machineを展開します。

  1. AzurePortalを開き、新規を選択。
  2. テンプレートのデプロイを選択。
  3. capture時に生成されたテンプレート内容を編集画面にペースト。
  4. vhd項目のuriを修正(この部分は個々のVMで異なる名称を設定する必要があります)。
  5. 保存。

保存を押すと、テンプレート内にあるparametersの記入が促されます。

テンプレートの作成前に、ネットワークインターフェスを作成しておく事をお勧めします。

可用性セットについてもここで指定が可能です。

自分の場合はリソースグループ内にはこのような構成を事前にしておきました。

  • 可用性セット
    • availability-masters
    • avaliability-agents
  • 仮想ネットワーク
    • network-mesos
    •  ネットワークセキュリティグループ
      • net-sec-master
      • net-sec-agent
    •  ネットワークインターフェース
      • netif-master01(10.0.0.8)
      • netif-master02(10.0.0.9)
      • netif-agent01
      • netif-agent02
  •  パブリックIPアドレス
    • addr-public-master
    • addr-public-master01
  • ロードバランサ
    • lb-public
    • バックエンドアドレスプール
      • lb-public-master
  • ストレージアカウント
    • storagemesos

Apache Sparkの導入

Apache sparkをmesos上で動かすにはオフィシャルからバイナリをダウンロードしてくるのが最も容易です。クラスタのリソース管理はmesosが行うため、Sparkを使うだけであればHadoopもYARNも不要です。

  • Apache SparkをオフィシャルサイトのDownloadページから取得する。(ダウンロードしてくるものがわからなければ、Pre-build for Hadoop 2.7 and latorを取得)
  • すべてのクラスタからアクセスできる場所にプログラムを配置。(httpやhdfs、Amazon s3といった共有ストレージに配置をしますが、自分はローカルのウェブサーバーにファイルを配置しました。)
  • 任意の場所にSparkを展開。

Apache Sparkを対話モードで起動

動作テスト

.

 

VisualStudio Codeをおためし

Microsoft Build 2015(Day 1)で発表されたVisualStudio Codeを早速インストールしてみました。

現在プレビュー版として公開されているものとなります。

vsc_01 atom_01

上の図は適当に間違えてエラー表示をさせています。

自分はMac上ではAtomを使用しているのでAtomのスクリーンショットを貼り付けてみました。(Atom側はTheme変更 + minimap + atom-typescriptを導入しています。)

VisualStudio Codeは”VisualStudio”という名前が付いているのですが、ポジション的にはテキストエディタとなります。Node.jsがベースな部分はAtomに似ている感じです。

現在はプレビュー版ではありますが、恐らくパッケージマネージャで機能追加が出来るようになるのではないかと思われます。

Microsoft製なら日本語も大丈夫…と思っていたのですが、残念ながら現時点では全角文字を人文字分と認識しているようです。これはAtomも同じですが、japanese-wrapを導入する事で解決しています。

vsc_02 Git管理下にあるファイルだとDiffを表示出来たり、コミットも行えるようです。

vsc_03 現時点では気の利いたUIがない設定。

デフォルト設定を参照しながら、自分の設定項目を記述していきます。

さすがに現時点ではプレビュー版ではありますが、Windows, Mac, Linux環境下で使用するテキストエディタが増えることは良いことだと思います。(自分はAtomに慣れてしまいましたけど…)

CoreOSを使用したDocker環境の作成(2)

とりあえずDockerコマンドで覚えておくこととか。

docker

pull

リポジトリからイメージをダウンロードしてくる。

create

コンテナの作成。

run

コンテナの作成と実行。

runするときに-vを指定する事で、ホスト側のボリューム(フォルダ)をマウント可能。

rm

コンテナの破棄。

rmi

イメージの破棄。

CoreOSを使用したDocker環境の作成(1)

ISOからのインストール方法

ISOファイルを使用したCoreOSのインストールの流れは、ダウンロードしたISOファイルを使用してブートした後、インストール対象のブロックデバイスに対してインストールイメージを書き込むといった感じになります。(親切な対話メニューみたいなものはありません。)

まずやること

  1. CoreOSのサイトからisoファイルをダウンロードする。
  2. isoを使用してインストール対象をブートする。

ISOファイルでbootをすると、coreユーザーでオートログインが行われます。ここでCoreOSのマニュアル通りに coreos-install -d /dev/sda -C stable とやりたくなりますが、これだけを実行してもインストールしか行われません。

「インストールは完了したけど、ログインが出来ない」という状態になってしまいますので、必要項目を記述したcloud-config.yamlというファイルを作成します。(詳細はhttps://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/を参照。)

まずパスワードを生成(以下の例ではパスワードをcoreに設定)

生成されたパスワードをユーザーに設定します。

設定ファイルを作成したらyamlファイルの設定を検証します。

大丈夫なようです。

パスワードを直接設定する以外にも、

  • ssh-authorized-keysを設定する方法
  • coreos-ssh-import-githubによるGitHubからのimport
  • coreos-ssh-import-urlによるJSONからのimport

といった指定も可能です。

作成した設定を使用してインストールを行います。

完了したら再起動を行います。

再起動完了後、指定したパスワード(または方法)でログインが可能になります。

ちなみに上記の作業をsshで接続して行いたい場合は、ISOでのオートログイン後に sudo passwd core してしまえば、sshでログイン可能になります。