Pythonを追加するDockerfile

pyenvは部品を使うだけで最終的には削除します(Pythonは/usr/localに導入) FROM ubuntu:bionic ARG DEBIAN_FRONTEND=noninteractive ARG PYTHON_VERSION=3.9.0 ARG PYTHON_ROOT=/usr/local ARG PYENV_ROOT=/tmp/.pyenv ARG PYBUILD_ROOT=/tmp/python-build RUN apt update && apt install -y \ build-essential \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libreadline-dev \ libsqlite3-dev \ wget \ curl \ llvm \ libncurses5-dev \ libncursesw5-dev \ xz-utils \ tk-dev \ libffi-dev \ liblzma-dev \ python-openssl \ git \ && git clone https://github.com/pyenv/pyenv.git $PYENV_ROOT \ && PREFIX=$PYBUILD_ROOT $PYENV_ROOT/plugins/python-build/install.sh \ && $PYBUILD_ROOT/bin/python-build -v $PYTHON_VERSION $PYTHON_ROOT \ && rm -rf $PYBUILD_ROOT $PYENV_ROOT

2020年12月8日 · aoirint

Mastodonをdocker-composeで立てる(Ubuntu 18.04)

tootsuite/mastodon: Your self-hosted, globally interconnected microblogging community Mastodon documentation 内容はコミットID44d5c6bc8ffd92cd201380dabe35748e50b6af68、Mastodon Dockerイメージバージョンv3.2.1(Digest:sha256:41cd5fb48d8b15ec806f08ab06fec98df33ec9b83a1f879e0fb30da9994018dc)におけるもの。docker-composeの設定ファイルバージョンは3。 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic $ uname -r 5.4.0-56-generic $ docker -v Docker version 19.03.14, build 5eb3275d40 $ docker-compose -v docker-compose version 1.27.1, build 509cfb99 $ docker images tootsuite/mastodon --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE tootsuite/mastodon v3.2.1 sha256:41cd5fb48d8b15ec806f08ab06fec98df33ec9b83a1f879e0fb30da9994018dc 37ca50fc92bd 6 weeks ago 1.86GB 今回はDocker Hub上のイメージを使用し、ローカルビルドをしない想定でいく(ごちゃごちゃするので)。 Mastodonを改造したい場合など、必要に応じてgithub:tootsuite/mastodonをFork/Cloneし、自分で/CIでビルドして信頼できるDockerレジストリに登録すればいいと思う。 ...

2020年12月6日 · aoirint

ソース公開するArduinoプログラムに秘密情報を埋め込む

aoirint/RoomSystemSensorESP32: ESP32とFirebaseを使った部屋センシング・オンライン化 クライアントの開発中に Arduinoプログラム(.ino)にWiFiパスワード・APIキーなどの秘密情報を埋め込む必要が出てきた。 ここでは、Arduino IDEの主要機能を持つCLIソフトウェアarduino-cliを使う。 arduino/arduino-cli: Arduino command line interface arduino-cliの使い方については、別記事参照。 arduino-cliの使い方 - えやみぐさ 秘密情報の埋め込み 秘密情報の埋め込みには、以下のようなシェルスクリプトcompile.shを作成するのが楽でよい。 DEFINES=の部分の-Dから=までの文字列が定数名、=の右辺が定数値として 定義された状態でソースコードがコンパイルされる。 ここでは同ディレクトリの.envファイルを読み込んで使用する。 .envファイルのフォーマットはよくあるものと同じで、 改行で区切られ、#から始まる行を無視するKEY=VALUE形式のテキストファイル。 ボードへの書き込みには以下のupload.shのようなスクリプトを使うとよい。 screenコマンドをラップするスクリプトserialmon.shもおいておく。 compile.sh #!/bin/bash set -eu if [ -f .env ]; then echo "Found .env file." export $(cat .env | sed 's/#.*//g' | xargs) fi # ESP32-DevKitC FQBN="esp32:esp32:esp32" # Arduino UNO # FQBN="arduino:avr:uno" DEFINES="-DSECRET_WIFI_SSID=$WIFI_SSID" DEFINES="${DEFINES} -DSECRET_WIFI_PW=$WIFI_PW" DEFINES="${DEFINES} -DSECRET_FIREBASE_HOST=$FIREBASE_HOST" DEFINES="${DEFINES} -DSECRET_FIREBASE_AUTH=$FIREBASE_AUTH" SKETCH="$(basename $PWD).ino" arduino-cli compile \ -b "$FQBN" \ --build-properties \ "build.defines=${DEFINES}" \ "$SKETCH" "$@" プログラム側では以下のようにする。#xはコメントではないので注意(文字列リテラルとして展開するマクロ)。 ...

2020年11月9日 · aoirint

arduino-cliの使い方

$ arduino-cli version arduino-cli Version: 0.13.0 Commit: 693a045 インストール Installation - Arduino CLI arduino/arduino-cli Arduino CLIの公式ドキュメントに従ってインストールする。後述するscreenコマンドも合わせてインストールする。 arduino-cliはDockerイメージも配布されているのでお好みで。 curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=~/.local/bin sh echo "export PATH=\"\$PATH:\$HOME/.local/bin\"" >> ~/.bashrc source ~/.bashrc sudo apt install screen プラットフォーム一覧を更新しておく。 arduino-cli core update-index シリアルポートを使うため、dialoutグループにユーザを追加する(/dev/ttyACM#や/dev/ttyUSB#のグループはdialout)。 sudo adduser $USER dialout スケッチの作成 特に特殊なファイルを必要としたりはしないので、 Arduino IDEで作成しても、好きなテキストエディタで作成してもよい。 一応テンプレート付きのスケッチを作成するには、arduino-cli sketch new SKETCH_NAMEを実行する。 手動で作成する場合にはArduino IDEと同様、 スケッチ名(ディレクトリ名)と同じ名前で、SKETCH_NAME.inoのように メインのソースコードを作成する。 以下、arduino-cliのコマンドはスケッチのディレクトリで実行する。 FQBNの確認 arduino-cliでボードを扱うときには、ボード名にあたるFQBNというコロンで区切られた文字列を使う。 arduino-cli board listallコマンドで arduino-cliが対応しているボードのFQBN一覧が出力される。 arduino-cli board listall esp32のようにキーワードを追加して、 絞り込むこともできる。 また、arduino-cli board listコマンドでPCに接続しているボードのFQBNを調べられる場合がある(Arduino系ボードの場合?)。 ...

2020年11月9日 · aoirint

Imagemagickで画像のDPIを変更する

画像のDPI(dot per inch)がばらばらの場合、 TeXで画像を取り込んだときのサイズがばらばらになるため統一する。 以下はIN.pngをDPI 72にしてOUT.pngに出力するコマンド。 convert -density 72 -units PixelsPerInch IN.png OUT.png もともとのDPIを調べるコマンド。 identify -format '%x,%y\n' IN.png

2020年11月9日 · aoirint

OBS Studio on Ubuntu 20.04 + NVIDIA GPUでWindow Captureを動作させる

Bug Report - [SOLVED] Window Capture Black Screen | OBS Forums Ubuntu + NVIDIA GPU環境では、OBS StudioでWindow Captureしようとすると 一部のアプリケーションで黒画面の表示になり動作しない。 おそらくOpenGLで描画しているものが対象。 いくつか対処法の候補がある。 Alt+F2からrを入力して実行 アプリケーションをフルスクリーン表示からウインドウ表示に切り替える アプリケーションをウインドウ表示からフルスクリーン表示に切り替える Window Capture (Xcomposite)の設定欄をスクロールして、Use alpha-less texture format (Mesa workaround)にチェックを入れる OSを再起動(GPUドライバに更新が入ったときなど)

2020年11月9日 · aoirint

PulseAudioで特定のアプリケーションからの音声出力だけを分離する

https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#module-loopback 以下のコマンドで仮想出力デバイスDummyOutput0と、そのループバックLoopback from Monitor of DummyOutput0が追加される。 pacmd load-module module-null-sink sink_name=DummyOutput0 sink_properties=device.description=DummyOutput0 pacmd load-module module-loopback source=DummyOutput0.monitor source_dont_move=true pavucontrolまたはPulseAudio Volume ControlのPlaybackから 目的のアプリケーションの出力先をDummyOutput0にする。 また、Loopback from Monitor of DummyOutput0の出力先を 希望のスピーカーにすることで音声出力を分離しつつ同時に視聴できる。 source_dont_move=trueは、デフォルトの入力デバイス変更時にLoopbackの入力デバイスも変更されてしまうのを防ぐオプション。 pavucontrolからも変更できなくなる。 仮想出力デバイスとループバックを削除するには、以下のコマンドを実行する。 pacmd unload-module module-loopback pacmd unload-module module-null-sink ログイン時に自動作成する ログイン時自動作成 /etc/pulse/default.pa # Custom load-module module-null-sink sink_name=DummyOutputApp sink_properties=device.description="DummyOutputApp" load-module module-loopback source=DummyOutputApp.monitor source_dont_move=true load-module module-null-sink sink_name=DummyOutputVoiceChat sink_properties=device.description="DummyOutputVoiceChat" load-module module-loopback source=DummyOutputVoiceChat.monitor source_dont_move=true load-module module-null-sink sink_name=DummyOutputGeneral0 sink_properties=device.description="DummyOutputGeneral0" load-module module-loopback source=DummyOutputGeneral0.monitor source_dont_move=true load-module module-null-sink sink_name=DummyOutputGeneral1 sink_properties=device.description="DummyOutputGeneral1" load-module module-loopback source=DummyOutputGeneral1.monitor source_dont_move=true ログイン時自動作成 PulseAudioの再起動 pulseaudio --kill pulseaudio --start デバイス接続時の入出力デバイス自動切り替えを無効化する https://askubuntu.com/questions/1061414/how-to-disable-pulseaudio-automatic-device-switch 新しい出力デバイスが検出されたとき、デフォルト出力デバイスが切り替わるのを防ぐ。 ...

2020年11月9日 · aoirint

Docker + Docker Compose on Vagrant Ubuntu Server

Downloads – Oracle VM VirtualBox Downloads | Vagrant by HashiCorp Vagrant box ubuntu/bionic64 - Vagrant Cloud Install Docker Engine on Ubuntu | Docker Documentation Install Docker Compose | Docker Documentation kvm (qemu)を使うこともできるらしいが、対応したboxを用意する必要があるのでVirtualBoxを使う。 KVM用仮想マシンをVagrantで手軽に作る | さくらのナレッジ Commands # 起動 vagrant up # 削除 vagrant destroy # ssh vagrant ssh # 停止(シャットダウン) vagrant halt Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64" config.vm.hostname = "ubuntu-docker" # config.vm.network "forwarded_port", guest: 80, host: 8080 # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" config.vm.provider "virtualbox" do |vb| vb.name = "ubuntu-docker" vb.memory = "1024" # vb.gui = true end config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository -y \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" apt-get update apt-get install -y \ docker-ce \ docker-ce-cli \ containerd.io curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose adduser vagrant docker SHELL end

2020年10月22日 · aoirint

ロータリエンコーダ付きステッピングモータをArduinoで制御して角度を取得する

機材 Arduino UNO(中華) ロータリエンコーダ付きステッピングモータ PKP214U06A-R2EL PKP214U06A-R2EL-L|PKPシリーズ/PKシリーズ|ステッピングモーター|オリエンタルモーター株式会社 モータ部説明書(PDF、HM-7433J.pdf) ロータリエンコーダ部説明書(PDF、HM-7439JE.pdf) 特性図(画像)(DC24V駆動時) モータ部 2相 ユニポーラ5本リード線 基本ステップ角度1.8° AC 50/60Hz 0.5kV 絶縁耐圧(1分間) ロータリエンコーダ部 分解能 200 パルス/回転(pulse/revolution) A相、B相、Z相:3チャンネル出力 DC5V駆動 モータドライバ SLA7078MPRT SLA7078MPRT |サンケン電気 2相ステッピングモータードライバー ユニポーラ駆動用 SLA7078MPRT: 半導体 秋月電子通商-電子部品・ネット通販 データシート(PDF、sla7073mprt_ds_jp.pdf) μステップ対応品 実使用電圧 10-44V モータドライバ基板 SEC20120330A エレ・メカ・ホビーショップSEC 資料置き場 新型 2相ステップドライバ資料(PDF、step-2p-v1.pdf) ステッピングモータの制御 ステッピングモータ 配線 ステッピングモータ本体からは、左から黒・緑・橙・青・赤の5本のケーブルが出ている。 これは説明書を見ると 黒・緑がA相(\(\rm A\)・\(\rm \overline{A}\))、 青・赤がB相(\(\rm B\)・\(\rm \overline{B}\))、 橙が電源になっている。 モータドライバ基板の対応する端子にこれらを接続する。 モータ電源として24V DC電源(ATS065-P240)を使用した。 ステッピングモータ ドライバ設定 μステップ機能(角度をより細かく制御できる)を使い、 励磁方式をW1-2相励磁(4分割)にするため、ドライバのM3端子をHIGHにする。 今回使ったドライバ基板ではDIPスイッチの4番をONにする。 第3回 ドライブICの制御方式「励磁方式」 | 特集 | NPM 日本パルスモーター株式会社 ドライバ基板上の半固定抵抗(Refに接続)を使って、 カレントダウン(過熱防止のための電流カット機能)時の電流と 通常時の電流をできるだけ絞る(反時計回りで絞れる)。 実際に回すときは、求められるトルクと発熱のトレードオフで調節すると思われる。 ...

2020年10月6日 · aoirint

PulseAudioでマイク入力をスピーカから出力する

まずはPCに接続されている音声入力デバイスのIDを確認する。 pactl list short sources # pactl list sources 3 alsa_output.pci-0000_00_1f.3.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz RUNNING 4 alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz RUNNING 5 alsa_output.usb-GeneralPlus_USB_Audio_Device-00.iec958-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz RUNNING 6 alsa_input.usb-GeneralPlus_USB_Audio_Device-00.analog-mono module-alsa-card.c s16le 1ch 44100Hz RUNNING ここでは、以下のようになっている。 ID 種類 3 本体のヘッドホン端子 4 HDMI 5 USBサウンドカードのヘッドホン端子 6 USBサウンドカードのマイク端子 以下のコマンドで、ID=6のUSBサウンドカードのマイク端子に入力されている音声をスピーカにループバックするモジュールがロードされる。 pacmd load-module module-loopback source=6 名前を使って指定することもできる。 pacmd load-module module-loopback source=alsa_input.usb-GeneralPlus_USB_Audio_Device-00.analog-mono 必要に応じて、pavucontrolを開いて出力先デバイスを設定する。 以下のコマンドで、ループバックモジュールをアンロードする。 pacmd unload-module module-loopback

2020年10月4日 · aoirint