Vagrant で Tiny Core Linux!
boot2docker を使ってみたところ、その起動の速さに驚かされた。 そこで、Vagrant でTiny Core Linuxを使ったら起動が早くてカスタマイズしやすいヘッドレスなLinux環境が構築できるのでは?と思ったのでやってみた。
Tiny Core Linuxのインストール 公式サイトからCorePlusのISOイメージをダウンロードしてインストール。
Vagrant Box化するために色々と設定(ここがハマりどころポイントその1) 2.1. vagrant ユーザーの追加 2.2. (ここ重要!) /etc/sudoers に vagrant ユーザーを追加 visudoなんて使えないので、vimなりechoなり。。。 2.3. curl と opensshをインストール tceやtc-load使います。 2.4. (ここ重要!)
/opt/bootlocal.sh
に 以下を追加
/usr/local/etc/init.d/openssh start
2.5. (ここも重要!) sshd_config を作成 とりあえずコピーで大丈夫です。
cp /usr/local/etc/ssh/sshd_config.orig /usr/local/etc/ssh/sshd_config
2.6. (ここ超重要!!!) /opt/.filetool.lst に変更したファイルパスを追加する こんな感じになります。
opt home etc/shadow etc/passwd etc/sudoers usr/local/etc/ssh/sshd_config
2.7. (ここも超重要!!!) filetool.sh -b
してバックアップに含める
Tiny Core Linux は、起動毎にルートファイルシステムをバックアップから復元している(?)ようで、これをしないで再起動すると、変更が吹き飛びます。
2.8. VM再起動
2.9. (やや重要) ホストのSSH鍵を /opt/.filetool.lst
に追加してfiletool.sh -b
2.10. (基本) Vagrantの公開鍵を /home/vagrant/.ssh配下に配置する
- Box 化
- (やや重要) Vagrantfileの編集(なければ作って) こんなんになります。
module VagrantPlugins module GuestTinyCoreLinux module Cap class Halt def self.halt(machine) begin machine.communicate.sudo('poweroff') rescue Net::SSH::Disconnect, IOError # Ignore, this probably means connection closed because it # shut down and SSHd was stopped. end end end end class Guest < Vagrant.plugin('2', :guest) def detect?(machine) machine.communicate.test('[ "$(cat /etc/os-release | grep ^NAME | cut -d = -f2)" = "TinyCore" ]') end end end end Vagrant.configure("2") do |config| config.vm.define "tinycore" do |config| config.vm.box = "poad/tinycorelinux" config.ssh.username = "vagrant" config.ssh.password = "vagrant" config.ssh.shell = "sh" config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.boot_timeout = 75 config.vm.graceful_halt_timeout = 35 config.vm.provider "virtualbox" do |vb| vb.memory = "2048" end end end
解説
module VagrantPlugins module GuestTinyCoreLinux module Cap class Halt def self.halt(machine) begin machine.communicate.sudo('poweroff') rescue Net::SSH::Disconnect, IOError # Ignore, this probably means connection closed because it # shut down and SSHd was stopped. end end end end class Guest < Vagrant.plugin('2', :guest) def detect?(machine) machine.communicate.test('[ "$(cat /etc/os-release | grep ^NAME | cut -d = -f2)" = "TinyCore" ]') end end end end
は、Vagrant Plugin の記述になります。
Tiny Core Linux か否かを Guest classの detect?メソッドを使用して確認します。(/etc/os-releaseのNAMEが TinyCoreであれば有効となるプラグインとなります。)
Tiny Core Linux であれば、vagrant halt
コマンドの実体は poweroff
を使うようにしています。
これで、Tiny Core Linux の起動と終了には問題が無くなった。 VirtualBoxの共有フォルダーが使えない?は仕方ない。
OpenBSDをVirtualBoxだけでUEFIインストール
VirtualBoxを使用して、UEFI起動するOpenBSD 6.4のVMを作成する手順です。 UEFI起動するようにOpenBSD 6.4をインストールするには、 公式の手順ではUSB FlashメモリーなどのUSB接続のストレージが必要となってしまいます。 でも、VM作るのにUSB接続のストレージなんか使いたくない!って人のための手順です。
- Linux VM(〜BSDのVMでも良いし、VirtualBoxでマウント出来るディスクイメージへdd出来るなら、ホストOSを使っても良い)を用意します。
- Linux VMに1GBくらいの仮想HDDを追加します。
- https://www.openbsd.org/faq/faq4.html#Download から、installXX.fs をダウンロードします。
- Linux VMから 2.で追加した仮想HDDへ、ddコマンドを使用してinstallXX.fs イメージを書き込みます。(ここ重要)
- OpenBSDをインストールするVMを作成し、installXX.fs イメージを書き込んだ仮想HDDを接続します。
- このこのVMには、OpenBSDをインストールする先の仮想HDDも必要となります
本当なら、installXX.iso や cdXX.isoでUEFI起動出来ればいいのですけどね。。。
余談ですが、上記手順でインストールして、拙著のQiita記事qiita.com の手順に構築したVagrant Boxもあります。 app.vagrantup.com
Phoenix (Elixir) を動かしてみる
準備
Elixir のインストール
基本的にはPhoenixやElixirの公式サイトを参照していただきたい。 Homebrewインストール済みのmacOS を使って開発しているため、Homebrewを使ってインストールする。
brew install elixir
インストールされたバージョン
$ iex -v Erlang/OTP 21 [erts-10.2.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace] IEx 1.7.4 (compiled with Erlang/OTP 21) $
PostgreSQLの起動
ホストに直接インストールしても良い。 インストール手順はPostgreSQLの公式サイトを参照していただきたい。
今回は、ホストの環境はあまり汚したくないため、Dockerコンテナーとして起動する。
docker run -d --name postgres -p 5432:5432 postgres:alpine
実行
Phoenix をインストールして起動する。
mix local.hex # Phoenix のインストール mix archive.install hex phx_new 1.4.0 # プロジェクト作成 mix phx.new phoenix_example cd phoenix_example # DBの設定(create databaseされます) mix ecto.create # Phoenix サーバーの起動 mix phx.server
http://localhost:4000 へアクセスすれば、Phoenixのデフォルトページが表示されるはず。
備考
Phoenix のインストール( mix archive.install hex phx_new
)時にバージョン指定しないと 1.2.5がインストールされる。
mix phx.server
に失敗するため、バージョン指定している。
Arch Linuxのインストール
目的
VirtualBox上に開発環境を構築しているが、Ubuntu ベースでは不要なアプリがインストールされてしまったりする。 その改善のため、Arch Linuxに乗り換えを検討するためにインストールしてみる。
やったこと
ArchWiki の日本語訳ドキュメント インストールガイド - ArchWiki を参考に、UEFI起動するArch Linuxをインストールした。
ハマりどころ
- gdisk で ESP作成する
インストールガイド - ArchWiki にも、UEFIの場合のインストール設定が記述されているがイマイチ分かりづらい。
gdisk コマンドの o コマンドでGPT作成し、2つパーティションを作成する。
このとき、1つ目のパーティションのtypeは、 ef00
とする必要がある。
また、 ef00
としたパーティションは、 mkfs.fat -F 32 <device>
として、FAT32にする。
RadikaでSystem.IO.IOException: new Microsoft.DirectX.DirectSound.SecondaryBuffer ---> アプリケーションでエラーが発生しました。 -2005401420 (DSERR_BUFFERTOOSMALL) 場所 Microsoft.DirectX.DirectSound.SecondaryBuffer..ctor(BufferDescription desc, Device parent)が発生する場合の対処
Radikaで
System.IO.IOException: new Microsoft.DirectX.DirectSound.SecondaryBuffer ---> アプリケーションでエラーが発生しました。
- 2005401420 (DSERR_BUFFERTOOSMALL)
場所 Microsoft.DirectX.DirectSound.SecondaryBuffer..ctor(BufferDescription desc, Device parent)
が発生する場合、
ツール -> オプション -> 再生で「再生バッファ(ミリ秒)」の値を大きくする。
デフォルトだと4000くらいになっていたと思いますが、100とか小さい値を設定すると、System.IO.IOException: new Microsoft.DirectX.DirectSound.SecondaryBuffer ---> アプリケーションでエラーが発生しました。
- 2005401420 (DSERR_BUFFERTOOSMALL)
場所 Microsoft.DirectX.DirectSound.SecondaryBuffer..ctor(BufferDescription desc, Device parent)
が発生するようです。
OpenFileManagerIt公開中止
先日公開させていただいたOpenFileManagerItですが、代わりの…もっと高機能なpluginがあったため、メンテナンスしないものは公開しない!ということで、公開を中止しました。
代わりのpluginは「StartExplorer」です。Eclipse Market Place見ていたらみつけたので、紹介させていただきます。