びぃえるくぅと。

ガラケーは打楽器。

RHEL8 に Ulauncher 5.8 を入れた時の備忘録

メモ

  1. https://github.com/Ulauncher/Ulauncher/releases から最新の tar.gz をダウンロードして展開する
  2. sudo dnf install libappindicator-gtk3
  3. sudo dnf install platform-python-devel
  4. sudo pip3 install python-Levenshtein
  5. Wayland 使ってるなら https://github.com/Ulauncher/Ulauncher/wiki/Hotkey-In-Wayland を参考にホットキー設定

参考文献

github.com

Hotkey In Wayland · Ulauncher/Ulauncher Wiki · GitHub

CentOS8 + Rootless Podman + NextcloudでVJ素材管理環境作りたい

QNAP か Synology の NAS 買えよって話なんですけど、最近フットレストと化している足下にある富士通のサーバーがキラキラした瞳で見上げてくるので・・・。

注意

全然詳しくない領域において試行錯誤した作業の備忘録となので、問題解決の方法が雑であるなど、あまり綺麗ではありません。あと今回VJはそこまで関係ないです。

前提

  • 家庭の閉じたネットワーク内での運用
  • CentOS が Docker 捨てたならその流れに乗る (Docker わざわざ導入するのが面倒)
  • podman-compose は使わない
  • Podman は Rootless で動かす

作業環境

  • サーバー機 Fujitsu PRIMERGY TX1310 M3
  • OS CentOS 8 (8.1.1911) Minimum Install
  • ストレージ
    • 内蔵SSD (Plextor M6S) → OS のインストール先
    • 内蔵HDD (WD Red 4TB) → Nextcloud のストレージとして
  • ソフトウェア
    • Podman 1.6.4

下ごしらえ

必要なソフトウェアをインストールします。

sudo yum install -y podman

Nextcloud を9000番ポートで公開するために、ファイアウォールの設定をします。

sudo firewall-cmd --add-port=9000/tcp --zone=public
sudo firewall-cmd --permanent --add-port=9000/tcp --zone=public
sudo firewall-cmd --reload
sudo systemctl restart firewalld

/etc/fstab を編集し、OS起動時に内蔵HDDが /mnt/storage にマウントされるようにします。
エディタは何でも良いですが、emacs の場合 /sudo::/etc/fstab とすることで良い感じに開けます。

ls -l /dev/disk/by-uuid
# 下記のような結果が出力されるので、/dev/sd?? と UUID との対応を見て fstab に書き込む UUID を探します
# lrwxrwxrwx. 1 root root 10 Mar 22 10:48 ********-****-****-****-************ -> ../../sda2
# lrwxrwxrwx. 1 root root 10 Mar 22 10:48 ****-**** -> ../../sda1
# lrwxrwxrwx. 1 root root 10 Mar 22 10:48 ********-****-****-****-************ -> ../../sdb1

emacs /sudo::/etc/fstab

一旦再起動してマウントされているか確認します。

そして Nextcloud の保存先となる /mnt/storage/nextclouddata の用意をします。

sudo mkdir /mnt/storage/nextclouddata
chown 1000:1000 /mnt/storage/nextclouddata
chcon -R -t svirt_sandbox_file_t /mnt/storage/nextclouddata

chron のところは https://github.com/containers/libpod/issues/3683#issuecomment-517237050 を参考にしました。

Nextcloud を起動する

podman-compose 使わない縛りをするのと、podman play kube が調子悪いので、コマンド手入力でポチポチ進めます。
なお Redis は必須ではないので、適宜 Redis に関する記述やオプションなどは消しても動きます。

まずは pod を用意します。pod 内で稼働する rootless コンテナ同士は localhost を介して相互に通信できます。

www.redhat.com

podman pod create --name nextcloud --publish 9000:80

次にコンテナを起動していきます。データベースのパスワードなど、必要に応じて適宜変更してください。

MariaDB 起動時のオプションについては https://hub.docker.com/_/nextcloud/ に記載されていたものをそのまま書いています。

podman run -d --name db --pod nextcloud \
       -v mariadb-data:/var/lib/mysql \
       -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
       -e MYSQL_DATABASE=nextcloud \
       -e MYSQL_USER=nextcloud \
       -e MYSQL_PASSWORD=nextcloud \
       mariadb --transaction-isolation=READ-COMMITTED --binlog-format=ROW
podman run -d --name redis --pod nextcloud -v redis-data:/data redis       

Nextcloud の保存先が /mnt/storage に作成したディレクトリに向くようオプションを設定します。

podman run -d --name app --pod nextcloud \
       -e MYSQL_HOST=127.0.0.1 \
       -e MYSQL_DATABASE=nextcloud \
       -e MYSQL_USER=nextcloud \
       -e MYSQL_PASSWORD=nextcloud \
       -e REDIS_HOST=127.0.0.1 \
       -v nextcloud-html:/var/www/html \
       -v /mnt/storage/nextclouddata:/var/www/html/data \
       nextcloud

今回できなかったこと

  • 最新の podman (1.8.x) を試すこと
  • podman play kube を使うこと
    • Kubernetes に詳しくないので・・・
    • ボリューム周りの機能がまだ貧弱そうに見えた
  • MariaDB のソケットをボリューム経由で Nextcloud に渡すこと
    • ソケット自体は見えているのになぜかうまくいかなかった
  • systemd と連携させること

終わりに

RedHat 先生が意気揚々と Docker を置き換えた割には Podman の使い勝手が微妙じゃない?と思うものの、Rootless で動かせたりと面白さもあります。

参考文献

VVVV で masawada モデルを使って遊ぼう

この記事は masawada Advent Calendar 2019 の 14日目です。昨日は id:mazco さんでした。

というか凄いお久しぶりです。なんと私ベトナムホーチミンにいるんですよ。11月に一時帰国を挟みましたが 4ヶ月目になります。 そしてその一時帰国中のスキを突いて Surface Pro 7 とか Apple Watch series 5 とかを買ったりしました。

そういえばベトナムって日本との時差2時間ありましたね。完全に公開タイミングミスりました。

masawada-3d

大学の時の友人 masawada 氏が 本人の3Dモデルを公開 していたのでとりあえず遊ぼうかという内容なのですが、遊び方を工夫したいと思います。(Apple Watch を買ったので masawada モデルをその上で動かすことを考えたのですがスキルがありません。)

とりあえず、いつもの VVVV https://vvvv.org で遊ぼうと思います。

FBX から DAE に変換

VVVV はデフォルトで DAE 形式の取り扱いに対応しています(VVVV上で自由にボーンを動かすとかはできませんが・・・)。 いったん Blender を使って FBX ファイルを取り込み、DAE ファイルをエクスポートしましょう。

ColladaFile ノードを使ってインポートして遊ぶ

とりあえず masawada でオーディオスペクトラムを作りました。

f:id:yadex205:20191214000412p:plain

マイクで拾った音に反応して masawada モデルが伸びます。

CircularSpread を使って円状に配置することもできます。

f:id:yadex205:20191214001008p:plain

どうせなのでテクスチャにエフェクトをかけてかっこよくしましょう。

f:id:yadex205:20191214001300p:plain

音圧で普段の見た目(テクスチャ)を取り戻すようにしました。

終わりに

終わりにへったくりもないですが、VVVV を使うとテクスチャとかモデルとかにエフェクトをかけまくれたり試しまくれたりするのが好きです。 また VVVV でVJするの復活してみようかな。

明日は id:maku693 さんです。

Node.js から ffmpeg 走らせてたら pipe 書き込み量の上限でハングアップしたらしい話

備忘録です(言い訳)。 あと、書いている内容は書いている時の知識に基づくので、誤りがある可能性があります。

状況

買った・ダウンロードした VJ 素材を VDMX で使えるように一括変換するバッチ処理的なものを Node.js で書いてます。

変換には内部で ffmpeg を呼び出しているのですが、進捗を取得できるよう -progress - というオプションをつけて標準出力に情報を書き出し、 それを Node.js スクリプト側で受け取る実装にしていました。

ところが、一定時間 経過すると呼び出している ffmpeg がハングアップするも、 ffmpeg 自体は死んでいないというよくわからない状態に必ずなるようになりました。

なお、呼び出しているのと全く同じコマンドを bash で実行すると ffmpeg はちゃんと完走するため、さらによくわからん状態です。

原因(らしきもの)の特定

はじめ htop とにらめっこしたりして紆余曲折を経ていたのですが、神頼みで ffmpeg hangup で検索したところ、 下記の Stack overflow の QA にヒットしました。

stackoverflow.com

It hangs because after a certain point it can not write to it's output pipe any longer.

なるほど、ffmpeg の進捗情報を pipe 経由で大量に受け取ってたのが原因かもしれません。 ということで ChildProcess.spawn するときに { stdio: 'ignore' } をしたところ、無事に完走できるようになりました。

パイプ以外で ffmpeg の進捗を受け取る

ごめんなさい現在探っている状態なので、見つけ・思いつき次第追記したいと思います。

(追記 2019.04.30) Node.js 側のバッファの問題?

github.com

古めですがこちらの issue に気になる内容があり、適宜 proc.stdout.on('data', (chunk) => {}) してやれば止まらず実行し続けるとのことでした。

そういえばと思い、(すでに stdout の方は .on('data') で拾っていたので)stderr に対して上記の対応をしたところ、 { stdio: 'ignore' } をしなくても止まらず完走するようになりました。

zsh で cd の時に peco 使って移動先を選んだ後に移動までやってもらいたい

実は4月から社会人デビューしていたのですが、 職場で使いやすいターミナル環境整えている時に pecoディレクトリ移動をするいろんな記事を思い出し導入しました。

blog.hotolab.net

試行錯誤した結果、上記の記事を参考にしてバッファ上に

$ cd

と入力されている時だけ C-h を押すと、近い階層のディレクトリ一覧を peco で表示するところまではできました。

function peco-path-find() {
    if [[ $LBUFFER =~ \s*cd\s* ]]; then
        # バッファに cd が入力されていた場合は5階層分のディレクトリを選択できるようにする
        local filepath="$(find . -maxdepth 5 -type d -not -path '*/\.*/*' | peco --prompt 'CHANGE DIRECTORY>')"
        BUFFER=$LBUFFER$filepath
    else
        # 上記以外の場合は近場のファイルやディレクトリを選択できるようにする
        local filepath="$(find . -maxdepth 3 -not -path '*/\.*/*' | peco --prompt 'PATH>')"
        BUFFER=$LBUFFER$filepath
    fi
    CURSOR=$#BUFFER
}
zle -N peco-path-find
bindkey '^h' peco-path-find

ただ、peco で選択したディレクトリをバッファに入力してくれるところまではしてくれるものの、 どうせなら peco で選択した後は実際に移動までしてもらいたいです。

その際に

zle accept-line

をするとバッファ上にある文字列で実行してくれるということを最近ようやく知れたので (参考: https://qiita.com/ymorired/items/4b0d8e95786efc1378b4)、結果以下のようになりました。

function peco-path-find() {
    if [[ $LBUFFER =~ \s*cd\s* ]]; then
        local filepath="$(find . -maxdepth 5 -type d -not -path '*/\.*/*' | peco --prompt 'CHANGE DIRECTORY>')"
        BUFFER=$LBUFFER$filepath
        zle accept-line # これ!!!!!!
    else
        local filepath="$(find . -maxdepth 3 -not -path '*/\.*/*' | peco --prompt 'PATH>')"
        BUFFER=$LBUFFER$filepath
    fi
    CURSOR=$#BUFFER
}
zle -N peco-path-find
bindkey '^h' peco-path-find

zsh については完全に疎い人間なので改めて設定を見直してこんがらがっていますが、開発環境が改善されて気持ち良くなるのは良いですね。

iPad Pro を買ってしまいました。

なので何か書いてみたかっただけです。画面キーボードですが、ボタンが大きいのか意外と普通のキーボードを使う感覚でタイプできなくもないですね。

9.7インチ

私は絵を描く人じゃないのでこのサイズで良いかなと思ってまぁちょうど良さげです。今後はVJ用途に使うつもりなので、そこまでスペース取らずに多機能なのは期待できそうです。iPad mini 4 は流石に小さすぎるかな。。。

Pro

せっかくなら強いやつをと思って Air じゃなく Pro にした訳ですが、使いこなす自信が今のところありません。Apple Pencil が使える以外でみなさんどんな利点がありますか。。。。?

Colorcode VJ がサクサク動いたり、動画編集がぬるぬるできるとかは期待できそうです。

その他

ウェブサイト制作にあたっての検証端末としてはガンガン使っていきます。WebGL で何か書いて iPad Pro の性能を活かして楽しめそうです。後は最近 Objective-Cというか Cocoa API とかに触れるようになったので、次は Swift で iOS 向けアプリとか書いてみたいなーという気持ちもあります。せっかくなら OpenGL を使ったもので。

EC2 の Amazon Linux 2 で rbenv を使わずに Ruby 2.4 を入れる (おまけに Node.js)

気づいたら Amazon Linux のメジャーバージョン(?) が 2 になっていたんですね。おめでとうございます。

面倒なので rbenv 使わず新しい Ruby を入れたい

さて Yahoo! とかで Amazon Linux ruby 2.4 とかで検索してみると、ほとんどの記事が rbenv を使ってインストールしているのですが、 まぁ面倒だしせっかくなのでなんとか rbenv を使わずに完結させたいと思った次第です。

検索結果をよく見てみると AWS 公式の記事があったので見てみると

aws.amazon.com

Ruby 2.4 – 2.4 シリーズの最新バージョン Ruby が利用可能になりました。次のようにインストールします。

$ sudo yum install ruby24

なんだぁ yum でインストールできるんじゃ〜んとか思って意気揚々とコマンドを叩くと

[ec2-user@ip-x-x-x-x ~]$ yum search ruby24
Loaded plugins: langpacks, priorities, update-motd
Warning: No matches found for: ruby24
No matches found

おらんのです。

(ちょっと話題から逸れて) 2つの Amazon Linux

docs.aws.amazon.com

AWS には、2 つのバージョンの Amazon Linux: Amazon Linux 2 および Amazon Linux AMI が用意されています。

なるほどさっきのは Amazon Linux AMI を対象とした記事だったんですね。初見殺し。

僕が動かしてるインスタンスAmazon Linux 2 の方なので単純に yum では入れられないようです。 AMI 版(?) の方はおそらく yum でインストールできるようになっていると思われます。

Extras Library

ですが Amazon Linux 2 になってから Extras Library という仕組みが作られたようです。 どういう仕組みで動いているかは把握していませんが amazon-linux-extras コマンドで追加のソフトをインストールすることができます。

2018/02/04 現在で Extras Library 経由でインストールできる トピック (と呼ぶそうです) の一覧を出力してみると

$ amazon-linux-extras list
  0  ansible2   disabled  [ =2.4.2 ]
  1  emacs   disabled  [ =25.3 ]
  2  memcached1.5   disabled  [ =1.5.1 ]
  3  nginx1.12   disabled  [ =1.12.2 ]
  4  postgresql9.6   disabled  [ =9.6.6 ]
  5  python3   disabled  [ =3.6.2 ]
  6  redis4.0   disabled  [ =4.0.5 ]
  7  R3.4   disabled  [ =3.4.3 ]
  8  rust1   disabled  [ =1.22.1 ]
  9  vim   disabled  [ =8.0 ]
 10  golang1.9   disabled  [ =1.9.2 ]
 11  ruby2.4  disabled  [ =2.4.2 ]
 12  nano   disabled  [ =2.9.1 ]
 13  php7.2   disabled  [ =7.2.0 ]
 14  lamp-mariadb10.2-php7.2   disabled  [ =10.2.10_7.2.0 ]

想定したよりも利用可能なトピックは少なかったですが、主要なアプリケーションの最新バージョンが一通り揃っています。 yum でインストールできるバージョンと比較してみると以下の通りになりました。(これも 2018/02/04 現在)

パッケージ (トピック) yum での最新 extras での最新
Ansible N/A 2.4.2
Emacs 24.3 25.3
Memcached 1.4.15 1.5.1
Nginx N/A 1.12.2
PostgreSQL 9.2.23 9.6.6
Python 3 N/A(?) 3.6.2
Redis N/A 4.0.5
R言語 N/A(?) 3.4
Rust N/A 1.22.1
Vim 7.4 (インストール済) 8.0
Go言語 1.8.3 1.9.2
Ruby 2.0.0 2.4.2
Nano 2.3.1 (インストール済) 2.9.1
PHP 5.4.16 7.2.0

Ruby 2.4.x をインストール

ということで Extras Library を経由して Ruby 2.4 をインストールします。

$ sudo amazon-linux-extras install ruby

細かいバージョン指定もできるようなので、EC2 のドキュメントを是非チェックしてみてください。 これで Ruby 2.4 + Gem が使えるようになりました。

[ec2-user@ip-x-x-x-x ~]$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
[ec2-user@ip-x-x-x-x ~]$ which ruby
/usr/bin/ruby
[ec2-user@ip-x-x-x-x ~]$ gem -v
2.6.13
[ec2-user@ip-x-x-x-x ~]$ which gem
/usr/bin/gem

めでたし。

(番外編) そういえば Node.js はどうやって入れたら良いの?

[ec2-user@ip-x-x-x-x ~]$ amazon-linux-extras list | grep node
[ec2-user@ip-x-x-x-x ~]$

・・・。

[ec2-user@ip-x-x-x-x ~]$ yum search nodejs
Loaded plugins: langpacks, priorities, update-motd
=== Matched: nodejs ===
http-parser.x86_64 : HTTP request/response parser for C
http-parser-devel.x86_64 : Development headers and libraries for http-parser
[ec2-user@ip-x-x-x-x ~]$

・・・・・・・・・・・・・・。

正解は

パッケージマネージャを利用した Node.js のインストール | Node.js

こちらを参考にしてみてください(丸投げ)。なるほどリポジトリを追加するんですね。分かるか。

Copyright © 2015 Yadex205