lxcコンテナの外部からコマンドを実行する


現在、Wineのビルドスクリプトを書いています。
Wine WOW64版のビルドには、(他の方法もありますが)lxcコンテナを使用する必要があります 。これをbashスクリプトに落としこむには、lxcコンテナをbashスクリプトで外部からコマンド操作しなければなりません。

つまり、bashスクリプトからlxcを呼び出し、lxcコンテナ内部でコマンド実行する必要があるのですが、この方法を見つけるのに少し手間取ってしまいました。
(検索キーワードに『lxc 自動実行 コマンド スクリプト』などを使うと、autostartの方法がヒットして目的の情報に辿りつけなかったため。)

lxc-attachコマンド実行の様子


lxcは、主にデプロイや実行をテストする用途に使われていると思っていたため、
『クリーンな環境を立ち上げて、外からコンテナ内でテストスクリプトを走らせる』
という使い方はすぐに見つかると思っていたのですが。
lxcを紹介しているサイトは多くの場合、初心者向けにlxcコンテナをターミナル上で立ち上げて終わりか、上級者が最初から設定ファイルを書くことを前提にしているかのどちらかでした。


設定ファイルが無くても、手動ならばlxcコンテナのターミナルからコマンド実行ができるのですから、これをコマンドで実現する方法は存在するはずです。
そしてlxcのコマンドを探しまわり実験を行った結果、以下のことがわかりました。

lxc-start では lxc-execute のコマンド指定に相当するオプションが使用できません。
lxc-execute はlxc-startよりも制限が多く、設定ファイルを用意しないと実用できません。

lxc-attach コマンドが、外部からコンテナ内でコマンド実行する方法として適している。


lxc-attachの詳細な解説はこちらで見ることができます。
http://manpages.ubuntu.com/manpages/trusty/ja/man1/lxc-attach.1.html



lxc-attach コマンドの使い方


lxcをインストールします。
sudo apt-get install lxc -y

lxcコンテナを作成します。
(今回は例としてWineビルドに使用する32bitコンテナを作成しています)
sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386


lxcコンテナを立ち上げます。
sudo lxc-start -n my32bitbox -d -o log.txt

lxcコンテナ内でのコマンド実行を、外部から指示します。
sudo lxc-attach -n my32bitbox -- uname -a


以上です。
lxcコンテナ内でのコマンド実行を確かめるために、64bitホストから32bitコンテナのuname -aコマンドを呼んでいます。
成功していれば、32bitカーネルの返事が返ってきます。

lxcコンテナ応答の例:
Linux my32bitbox 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 i686 athlon i686 GNU/Linux

なお、lxcコンテナの起動を忘れてlxc-attachを実行すると、
lxc-attach: failed to get the init pid
というエラーメッセージが表示されます。

「四季」のドメイン名がどんなWebページとして使われているか調べてみた。

ふと、「春夏秋冬」のドメイン名で、どのようなWebページが公開されているのか気になったので、調べてみました。一般名詞など、一部のドメイン名は高額で取引されているらしいという話を聞きます。
そのため、四季のドメイン名を使うWebページは、きっとそれなりの(利益を生むような)Webサービスが使っているのだろうな、と思った次第。

なお今回は、英文を読む練習として概要をざっと読んだだけなので、私が書いてあることを誤読している可能性があります。
本当に書いてあることが知りたい方は、実際にページヘアクセスして自分で書いてある内容を読んでください。

また、.com ページが存在しない場合は、代わりというわけでもありませんが、.co.jp を見に行っています。


spring.com

spring.comは、2つのIT関連仕事探しサービスを紹介するページになっています。
Spring Technologyは、「UKの国際的で巨大なIT人材派遣会社」で、20年以上前から活動しており、「IT人材派遣という市場を先頭を切って立ち上げた」とのこと。
Spring Personnelが個人のキャリア形成をサポートしながら仕事を探せるサービスだと書いてあるようです。

spring.comのページ

summer.com

ページが存在しません。

summer.co.jp

『このドメインは、お名前.com レンタルサーバーで運用されています』
とのことでした。つまり使われていません。きっとお高いのだろうと思います。


autumn.com

Digimediaなる団体のページのようです。「Privacy Policy」へのリンクがあります。
「Privacy Policy」を読んだ限りでは、
共同出資会社(L.P.) Digimedia (http://www.digimedia.com/)
があり、ここがautumn.comを所有しているようです。
どうやら「オクラホマの田舎のスイカ小屋」で生まれたドメイン名販売(貸出)会社のようです。
つまりsummer.co.jpと同じように、ドメイン会社が所有しているだけで、今は使われていない、ということかと思います。

autumn.comのページ

winter.com

ページが存在しません。

winter.co.jp

『たかつえスキー場スノーボードスクール&ディガー&カフェのホームページ』とのこと。

「たかつえ」というのは地名だろうと考え、検索してみたところ、どうやら福島県南会津郡にある「高杖原」から取ったようです。

スノーボード教室の開催場所であるhttp://www.takatsue.jp/で別サイトを持っています。ここからスノーボードスクールへ飛ぶ方法は、探していないのでわかりませんが。

winter.co.jpのページ内では、「CAFE ジャーゴン」という名前が異彩を放ちます。
「ジャーゴン」名称からしてWebコンテンツのコーナーかと思ったら、本当に「ジャーゴン」という名前のカフェなのですね。

一瞬だけですが、このカフェには行ってみたくなりました。
以上です。

Ubuntu14.04環境で動画をスキップするとクラッシュする問題の回避策


Ubuntu14.04環境で、一部の動画再生に問題が発生することがあるようです。
その対処法、というか回避策について。

Wine上のVLCメディアプレイヤー


動画を再生中にスキップなどを行うと、動画プレイヤ・アプリケーションがクラッシュする場合があります。
動画のコーデックによってこの現象が発生するか決まるようで、今のところ、m2tsではクラッシュしますが、mkv形式は問題ありません。


Ubuntu標準の動画プレイヤであるTotemだけでなく、VLCメディアプレイヤーでも同じ現象が起こります。
(このため、原因はビデオ関連のライブラリかLinuxカーネル周辺の描画周りなのかなと考えています。ハードウェア環境は AMD A8-6500 APU のオンボードグラフィックであり、他の環境でも再現するかは検証していません。)

アプリケーション固有の問題ではないため、単に代替アプリケーションに切り替えて解決することはできません。

そこで対処法として、Wine上でWindows版のVLCを使うことで、問題を回避しました。

VLCのビデオ出力設定画面

UbuntuでWineを導入するには、アプリケーションセンターでWineを検索するか、コマンドラインで
sudo apt-get install wine -y
を実行します。
そしてWindows版のVLCメディアプレイヤーは、VLC公式サイトからダウンロードしてインストールします。
Wine導入後にインストーラを右クリックして「別のアプリで開く」からWineを選択することでインストーラが起動します。


私の環境では、VLCのデフォルト設定では動画が表示されなかったので、ビデオ出力の設定を変更する必要がありました。
ビデオ出力の設定は、「ツール」から「設定」を開き、「ビデオ」項目のディスプレイの出力にて変更できます。
「Direct3Dビデオ出力」を選択することで画面表示されるようになり、問題なく動画再生ができるようになりました。

なお、実用上の注意としては、再生動画をドロップできるのは、VLC下部のグレーのコントロール部分だけです。
Windows環境のようにVLCウィンドウのどこでもドロップした動画を再生してくれるわけではありません。

『VLCをデスクトップショートカットから起動→動画をドラッグ&ドロップして再生』
という使い方をすると思われるので、知っていないとハマる場合もあると思います。

Ubuntu14.04がリリースされたのでVirtualBoxゲストにインストール

Ubuntu14.04が出たので、いつでも実験に使えるように仮想環境にインストールして、VitualBoxゲストを作っておくことにしました。
ついでに共有フォルダを設定して動作確認など。

virtualbox上のUbuntu14.04ゲスト
なお、ホストOSもUbutnu14.04なのですが、標準パッケージのOSS版VirtualBoxにいつものOracle Extensionを導入してUSB2.0を有効化して使用しています。

実機環境はすでに Ubuntu14.04のDaily Build を導入済みだったので、いつもどおりにアップデートすれば終了なので、あまりイベントっぽくはなりませんでした。
Ubuntu14.04の設定やセットアップもDaily Build導入時に、ひと通りやりましたし、その後に日本語入力もセットアップしました。



当然ながらインストールは問題なし。
Daily Buildではインストールの途中にUbuntuOneのアカウント設定があったのですが、正式リリースでは無くなっていました。
そういえばUbuntuOneはサービス終了することになったので、驚くようなことではありませんでした。

Ubuntu14.04ゲストから共有フォルダにアクセス

共有フォルダの設定方法はこれまでのUbuntuと同じ方法で良かったです。

仮想マシンゲストを起動して、タブの「デバイス」から「Guest AdditionのCDイメージを挿入」でゲストにゲスト拡張のインストールCDを挿入してインストールします。

ゲストOS内で、ゲストOS上のユーザを、VirtualBox共有フォルダのグループに追加。
 sudo gpasswd -a ユーザ名 vboxsf
その後、再ログイン。

Ubuntu14.04 Daily Build 日本語入力 fcitx-mozcを導入

Tabキーで予測変換入力ができる快適さがたまりません。

mozcの予測変換


fcitx-mozcを導入しました。
リリースの情報は、いつもお世話になっている gihyo様の Ubuntu Weekly Recipe から。

Ubuntu14.04正式リリース前ですが、Ubuntu Japanese Term のTrustyリポジトリには、日本語入力が用意されています。

Ubuntu Japanese Term のリポジトリを有効化
sudo apt-add-repository ppa:japaneseteam/ppa

もちろん、まだUbuntu14.04はDaily Buildですし、Ubuntu Japaneseページには14.04版リポジトリへの公式な案内がないので、導入は自己責任で。

ここから、Ubuntu-jaのパッケージを有効にします。
(dist-upgradeはいらないかと思いますが、ついでに。)
sudo apt-get update && sudo apt-get dist-upgrade -y
sudo apt-get install ubuntu-defaults-ja

ここまででインプットメソッドがキーボードアイコンに変わりますが、まだanthyのままです。
当然ながらTabキーによる予測変換も使用できません。
(それどころかTabキーを押すと変換中の入力候補がフリーズする。)
fcitxセットアップヘルパでfcitx-mozcに切り替えます。

Alt+F2キーなどでUnity Dashを表示し、gihyo記事通りの「 セットアップ」や目標物の「fcitx」などと入力してセットアップヘルパを起動し、ログアウト、ログインするだけです。

いつもながらUbuntu Japanese Teamには感謝し足りません。

Ubuntu14.04にJSLint.vim(またはJSHint.vim)を導入する


個人プロジェクトのために、JavaScript開発環境の構築をはじめました。
まずは、JavaScriptのコードチェックを行うjslint.vimを導入します。
jslint.vimによる強調表示

JSLintの導入は決定したものの、JSLintのWebサイト版を使うにはコードをコピペしなければなりませんし、コマンドライン版もコマンドを叩く一手間がかかります。
現代的なIDEのように、書いた直後から動的に構文チェックしてもらいたいところです。
そこでjslint.vimを導入することにしました。


jslint.vimの導入


jslint.vimを取得します。
git clone https://github.com/hallettj/jslint.vim.git

ブラウザ外部のJavaScript実行環境として、node.jsをインストールします。
sudo apt-get install nodejs -y

jslint.vimのインストールに必要となるrakeツールをインストールします。
sudo apt-get install rake -y

jslint.vimのリポジトリ内に移動して、rake installを実行します。
cd jslint.vim/
rake install

あとは適当な.jsファイルをvimで開くだけです。
jslimt.vimは、デフォルトで自動的にJSLintによるチェックが行われ、ヒントが表示されるようになっています。

 jshint.vimの導入

リポジトリは
https://github.com/wookiehangover/jshint.vim
を使用しました。
導入手順もgithubリポジトリのページに書いてある通りにします。
このリポジトリからjshint.vimを導入するには、Bundleを使うのが簡単です。


Bundleが導入されていない方は、以下の手順でBundleを導入します。

Vimに、Vundleを使ってBundleを導入します。
手順はVandleリポジトリのページに書かれています。

https://github.com/gmarik/Vundle.vim

Vundleのソースリポジトリを入手します。
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

Vandleリポジトリのページに書かれている設定を ~/.vimrc に書き込みます。

vimを立ち上げて、Vim中でコマンドを入力してプラグインをインストールします。
vim
:PluginInstall

Vundleは、インストール中にエラーが出ますが、とりあえず大丈夫かと思われます。
リポジトリ管理者の個人にとって使いやすい固定パスが書き込まれているだけで、別段害はないか、
あるいは単にこのコミットにだけ含まれていて、後日修正されるのでしょう。
Vundleのインストール進行表示
Vim内で、
:h vundle
にてヘルプが出ることを確認して、Vundleのインストール確認に代えます。


Bundleが導入されている環境で、jshintを導入するために、~/.vimrc に以下の行を書き足します。
Bundle "wookiehangover/jshint.vim"

Vimを起動し、 以下のコマンドにてjshintを導入します。
:so ~/.vimrc
:BundleInstall

ただし、このままでは"node コマンドが無い(意訳)"というエラーが出るので、
sudo apt-get install nodejs-legacy -y
を導入して対応します。

Vimで適当な.jsファイルを開けば、自動的に構文チェックが行われます。

jshint.vimによる強調表示

 雑感

jslint.vim/jshint.vim はフォークされたバージョンがいくつかあるようです。選ぶだけでも一苦労。
導入方法も、対象のリポジトリや解説しているブログによって異なるため、ちょっと迷います。
jslint.vimのリポジトリは https://github.com/basyura/jslint.vim を使ったほうがよいという意見をあちこちで見かけましたが、今回はとりあえず本家版を使うようにしました。


jslintとjshintの違いとして、ソースの中ほどに書かれた文字列連結への警告表示が、jshintでは表示されたのですが、jslintでは表示されていませんでした。
警告の方針が違うのか、あるいはjslintはソース中に警告箇所を発見すると、そこから下のチェックを行わないのかもしれません。
(あるいは、リポジトリごとの設定の違いによるものかもしれません。)
とりあえず、このあたりはこれから使ってみればわかるものかと思います。

jslint.vimもjshint.vimも、デフォルトのシンタックスカラーでは、文字列が警告に塗りつぶされて読めなくなるようです。

JSLintを導入することにした理由は、以前にCoders at Work プログラミングの技をめぐる探求で、製作者であるダグラス・クロックフォード氏へのインタビューを読んでいたからです。

とはいえJSLint から JSHint をフォークした理由(翻訳)という議論もあるようですので、開発中に無理がでるようなら、チェックが現実的で緩いとされるJSHintに切り替えようと思っています。

閑話休題。


次は、VimにJavaScriptのシンタックスハイライトを導入する予定です。

Ubuntu14.04 Daily Buildで、日本語入力できなくなった場合の対処法(対症療法)

これから不具合報告します。
不具合報告しました。

Ubuntu14.04 DailyBuildを試用中に、Gedit上で日本語入力ができなくなる現象に遭遇しました。
以下はその対症療法です。
現象が発生するごとにこの対応をしなければならないため、不具合報告してから、この方法で凌ぎつつfixされるのを待つつもりです。


 
現象:
Geditを起動してAnthyによる日本語入力で作業を行う。
アルファベットが直接タイプされる。
日本語入力が無効になっていることに気づき、「半角/全角」キーを押すのですが、やはりアルファベットが直接タイプされる。
IMEによる変換が行われません。
この後、「半角/全角」キーを何度押してみても、日本語入力ができるようになりません。


日本語入力ができるようにする方法は、以下のとおりです。
・右上の日本語入力(anthy)アイコンをクリック
・「入力モード(あ)」から全角英数を選択する
・「半角/全角」キーを2回押す
以上の手順で、日本語入力ができるようになります。

この現象は、今のところ、Geditで日本語入力しようとすると起こります。
(まだ他のアプリケーション上で長文を打ったことがないので、Geditの問題なのかどうかはわかりません。)



2014/04/12追記
その後、この不具合への対処法は『Altキーを押すと入力切り替えができるようになる』へと変化しました。
Ubuntu14.04日本語入力環境の記事も出たので、もうそろそろfcitxのmozcに移行しようかとも思っているのですが。

2014/04/13
fcitx-mozcに移行しました 。

その他の環境構築についてはこちらのUbuntu14.04の記事にまとめてあります。

ComfyUIでXYZ-PlotするワークフローのサンプルとTips(ComfyUI-XYZ-Stitch)

 ComfyUIでAutomatic1111的なXY-Plotをしたいのだが、ComfyUIデフォルト機能には用意されていない。     カスタムノードが必要となるのだが、Webには古いとか何故か動かないとかなXY-Plotパッケージの使ってみた系記事か、githubに上げられた...