K.MIURA@OUC

The special secret of making dreams come true can be summarized in four C’s. They are Curiosity, Confidence, Courage, and Constancy. –Walt Disney

gcloudを入れたコンテナを作る

[基本環境]
  • Debian 12 (amd64)
  • Docker 27.3.1
[やりたいこと]
  • gcloudコマンドがインストール済みのDockerコンテナを作りたい
  • ついでに、日本語入力対応済みのコンテナにする
[注意]
[Dockerコンテナの展開手順]
  1. Dockerイメージを作成する
    ubuntu 22.04を基礎とする
    ※ Dockerイメージ名をubuntu2204:gcloudにしている
 $ docker pull ubuntu:22.04
 $ touch Dockerfile
 $ editor Dockerfile
   Dockerfileの中に、以下の内容を書いて保存する
   FROM ubuntu:22.04
   RUN apt-get update -y && \
       apt-get install -y curl && \
       apt-get install -y apt-transport-https && \
       apt-get install -y ca-certificates && \
       apt-get install -y gnupg
   RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
       curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg && \
       apt-get update -y && \
       apt-get install google-cloud-cli -y
   RUN apt-get update -y && \
       apt-get install -y locales && \
       locale-gen ja_JP.UTF-8 && \
       each "export LANG=ja_JP.UTF-8" >> ~/.bashrc
 $ docker build ./ -t ubuntu2204:gcloud
 
  1. Dockerイメージを確認する
 $ docker images
   このコマンドを実行すると
     ubuntu2204  gcloud ..略..
   という行があるはず
  1. Dockerコンテナを展開する
    ※ コンテナ名をgoogle-envにしている
 $ docker run -itd --privileged --name google-env ubuntu2204:gcloud
 $ docker exec -it google-env /bin/bash
   このコマンドを実行して
     root@<コンテナID>:/#
   が表示されていれば、コンテナの展開に成功している
Read more →

Fletを基礎にウェブアプリを作る

[基本環境]
  • Debian 12 (amd64):Host(VM)
  • Python 3.11:Host(VM)
  • Ubuntu 22.04(amd64):Guest(Container)
  • Python 3.11:Guest(Container)
[やりたいこと]
  • Fletを基礎にしたウェブアプリ開発の基盤環境を作りたい
[注意]
[Flet環境の構築手順]
  1. ホストOS上にDockerコンテナを展開する
    ※ コンテナ名をfletにしている
 $ docker pull ubuntu:22.04
 $ docker run -itd --privileged -p 80:80/tcp --name flet ubuntu:22.04
 $ docker exec -it flet /bin/bash
  1. Fletプログラミング用のユーザを作成する
    ※ ここから先はコンテナ(flet)内での手続き
    ※ ユーザ名をfuserにしている
 $ apt update
 $ apt upgrade
 $ apt install sudo
 $ adduser fuser
 $ usermod -G sudo fuser
 $ su - fuser
  1. Flet環境を構築する
    ※ 2の続きなので、ここもコンテナ内での手続き
    ※ python仮想環境名をenvにしている
    ※ Flet環境名をflet-testにしている
 $ sudo apt install nano python3.11-venv pip git
 $ python3.11 -m venv env
 $ source env/bin/activate
 $ pip install flet
 $ flet create flet-test
 $ editor flet-test/src/main.py
   main.pyの一番下の行にある
   ft.app(main)   ft.app(target=main,view=None,port=8000)に変更して上書き保存する
 $ sudo apt install apache2 systemctl
 $ sudo editor /etc/apache2/conf-available/reverse_proxy.conf
   reverse_proxy.confの中に、以下の内容を書いて保存する
   <IfModule mod_proxy.c>
     ProxyRequests Off
     <Proxy *>
       Require all granted
     </Proxy>
     ProxyPass /ws ws://localhost:8000/ws
     ProxyPassReverse /ws ws://localhost:8000/ws
     ProxyPass / http://localhost:8000/
     ProxyPassReverse / http://localhost:8000/
   </IfModule>
 $ sudo a2enconf reverse_proxy
 $ sudo a2enmod proxy proxy_http
 $ sudo systemctl restart apache2
  1. Flet環境を起動する
    ※ 3の続きなので、ここもコンテナ内での手続き
 $ python3.11 flet-test/src/main.py &
   PCのウェブブラウザを開いて、
     http://127.0.0.1/ または 
     グローバルIPを持っているなら、127.0.0.1をグローバルIPにする
   に接続すると、Fletの実行結果を確認できるはず
  1. Flet環境を停止する
    ※ 4の続きなので、ここもコンテナ内での手続き
 $ ps -aux | grep python
   このコマンドを実行すると
     fuser <数字> ..略.. python3.11 flet-test/main.py
   という行があるはず
   <数字>は、その都度、確認すること!
 $ kill -9 <数字>
[Fletプログラミング]
  • main.pyを編集すると、実行結果が変わります
  • プログラム例は、別の記事でまとめたいと思います
Read more →

UTMを用いてLinux環境を作る

[基本環境]
  • Mac mini(Apple M1チップ)
[参考サイト]
[やりたいこと]
  • UTMを用いてLinux環境の仮想マシンを展開する
[UTMのインストール]
  1. ここにアクセスする
  2. GitHubの方にあるDownload from GitHubをクリックする
    ※ UTM.dmgがダウンロードされる
  3. UTM.dmgをダブルクリックした後、UTMをApplicationフォルダに追加する
[仮想マシンの作成]
  1. Applicationの中にあるUTMを選択する
  2. メニュー画面の中から新規仮想マシンを作成を選択する
  3. カスタムの中から仮想化を選択する
  4. OSの中からLinuxを選択する
  5. [起動ISOイメージ]欄の[選択]ボタンを押す
  6. LinuxのISOファイル(ubuntu-24.04-live-server-arm64.iso)を選択する
    ※ ISOファイルは事前にここからダウンロードしておくこと
    ※ GUI(デスクトップ)環境が必要なら、ここから入手できるubuntu-22.04.4-live-server-arm64.isoを使ったほうが良い
  7. メモリ・CPU・ストレージ・共有ディレクトリは適当に設定する
  8. 仮想マシン名は半角文字で適当に設定する
[仮想マシンの起動]
  1. UTMの左側にある一覧の中から、起動する仮想マシンを選択する
    ※ 初めての起動では、Linuxのインストールが実行される
    ※ Linuxのインストール手順は、上記の参考サイトを見てほしい
Read more →

テキスト内の全角文字を見つける

[基本環境]
  • Python 2.7.16
[やりたいこと]
  • TeXソースファイルの中に全角文字があるかどうかをチェックしたい
[プログラムの使い方]
  1. 以下のソースコードをisHarfCheck.pyという名前で保存したと仮定する
  2. sample.texという名前のTeXソースファイルをチェックすると仮定する
  3. このとき、以下のコマンドで実行できる
  $ python isHarfCheck.py sample.tex
[ソースコード]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import re,sys

def isHarf(value):
  return re.match(r"^[\x20-\x7E]+$", value) is not None

def isEnter(value):
  return re.match("^\n$", value) is not None

def isHarfCheck(file):
  fid = open(file, "r")
  list = fid.readlines()
  line = 1
  flag = 0
  for value in list:
    if isHarf(value)!=True:
      if isEnter(value)!=True:
        print("l."+str(line)+": "+value)
        flag = 1
    line = line + 1
  fid.close()
  return flag

args = sys.argv
flag = isHarfCheck(args[1])
print("----------")
print("msg> Checked '"+args[1]+"'.")
if flag!=0:
  print("msg> Double-byte characters APPEAR in the text.")
else:
  print("msg> Double-byte characters do NOT appear in the text.")
Read more →

ショートカットキーを設定する

[基本環境]
  • Visual Studio Code(VSCode) 1.42.2
[参考サイト]
[やりたいこと]
  • VSCode内のターミナルとエディターをショートカットキーで行き来したい
[初期設定のショートカットキー]
  • [Ctrl]キー+[Shift]キー+[@]キー:ターミナルが開く
  • [Ctrl]キー+[数字]キー:数字で指定したエディターに移動する
    • [1]キーは一番左のエディターで、[2]キーはその隣のエディターである
[ターミナルに移動するショートカットキーを設定する]
  1. [Code]->[基本設定]->[キーボード ショートカット]で設定画面を開く
  2. 入力してキーバインド内を検索でworkbench.action.terminal.focusを検索する
    • 説明文に「ターミナル:ターミナルにフォーカス」と書いている
  3. 説明文の左に現れる[+]ボタンをクリックする
    • 設定済みなら[ペン]ボタンになっている
  4. ショートカットキーを設定する
    • 例えば、[Ctrl]キー+[M]キーを押したあとに、[T]キーを押すみたいな感じ
Read more →

トークン認証でgitを実行する

[基本環境]
  • Debian 10.3.0
[参考サイト]
[注意]
  • 8月末まで、次のコマンドをを実行した後に、パスワード認証で更新できた
    • git push origin master
  • しかし、この認証が廃止されたので、トークン認証に変更する必要がある
  • この記事は、トークン認証に変更する方法をまとめている
[トークンを生成する (GitHubのウェブサイト上で実行)]
  1. プロフィールのアイコンをクリックし、 Settings をクリックする
  2. 左端に並んでいる項目の中から Developer settings をクリックする
  3. 左端に並んでいる項目の中から Personal access tokens をクリックする
  4. Generate new token をクリックして、トークンを生成する
    • Note は、トークンのラベルの感覚で、適当に記述する
    • Expiration は、トークンの有効期限を設定する
    • Select scopes は、アクセスを許す項目を選択する
  5. トークンをメモする
[トークンを適用する (ターミナル上で実行)]
  1. git remote set-url origin https://ghp_xxxxxxxxxx@github.com/hoge/hoge.git
[データをアップロードする (ターミナル上で実行)]
  1. git add -A
  2. git commit -m “コメント”
  3. git push origin master
Read more →

Docker上でRedmineを展開する

[基本環境]
  • Ubuntu 18.04
  • Docker 19.03.12
[参考サイト]
[注意]
[Dockerコンテナの展開(ホストOS上で実行)]
  1. docker pull ubuntu:18.04
  2. docker run -itd --privileged -p 80:80/tcp --name redmine ubuntu:18.04
  3. docker exec -it redmine /bin/bash
[コンテナ(redmine)内での手続き]
  1. adduser ubuntu
  2. apt-get update
  3. apt-get upgrade
  4. apt-get install sudo
  5. usermod -G sudo ubuntu
  6. su - ubuntu
  7. sudo apt-get install locales
  8. sudo locale-gen ja_JP.UTF-8
  9. locale -a
    • ja_JP.utf8の存在を確認
  10. sudo apt-get install build-essential zlib1g-dev libssl-dev libreadline-dev
  11. sudo apt-get install libyaml-dev libcurl4-openssl-dev libffi-dev
  12. sudo apt-get install postgresql libpq-dev
  13. sudo apt-get install apache2 apache2-dev
  14. sudo apt-get install imagemagick fonts-takao-pgothic
  15. sudo apt-get install subversion git vim
  16. curl -O https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.5.tar.gz
  17. tar xvf ruby-2.6.5.tar.gz
  18. cd ruby-2.6.5
  19. ./configure --disable-install-doc
  20. make
  21. sudo make install
  22. cd
  23. ruby -v
    • Rubyのバージョンを確認
  24. sudo service postgresql start
  25. sudo -u postgres createuser -P redmine
    • パスワードをredmineと仮定
  26. sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
  27. sudo mkdir /var/lib/redmine
  28. sudo chown www-data /var/lib/redmine
  29. sudo -u www-data svn co https://svn.redmine.org/redmine/branches/4.1-stable /var/lib/redmine
  30. cd
  31. vi database-yml.sh
  32. chmod 755 database-yml.sh
  33. sudo ./database-yml.sh
  34. more /var/lib/redmine/config/database.yml
    • ファイルの存在を確認
    • password:にpostgresqlのユーザredmineのパスワードを書く
  35. vi configuration-yml.sh
  36. chmod 755 configuration-yml.sh
  37. sudo ./configuration-yml.sh
  38. more /var/lib/redmine/config/configuration.yml
    • ファイルの存在を確認
  39. cd /var/lib/redmine/config/
  40. sudo chown www-data:www-data database.yml
  41. sudo chown www-data:www-data configuration.yml
  42. cd /var/lib/redmine/
  43. sudo -u www-data bundle install --without development test --path vendor/bundle
  44. sudo -u www-data bin/rake generate_secret_token
  45. sudo -u www-data RAILS_ENV=production bin/rake db:migrate
  46. sudo gem install passenger -N
  47. sudo passenger-install-apache2-module --auto --languages ruby
  48. cd
  49. vi redmine-conf.sh
  50. chmod 755 redmine-conf.sh
  51. sudo ./redmine-conf.sh
  52. more /etc/apache2/conf-available/redmine.conf
    • ファイルの存在を確認
    • 3行目(</Directory>)以降の内容がpassenger-install-apache2-module --snippetの出力結果であることを確認
  53. sudo a2enconf redmine
  54. apache2ctl configtest
  55. sudo service apache2 reload
  56. sudo vi /etc/apache2/sites-enabled/000-default.conf
    • DocumentRootの値を /var/lib/redmine/public に変更
  57. apache2ctl configtest
  58. sudo service apache2 reload
  59. sudo service apache2 start
  60. sudo vi /etc/init.d/redmine-start.sh
  61. sudo chmod 755 /etc/init.d/redmine-start.sh
  62. sudo vi /etc/init.d/redmine-stop.sh
  63. sudo chmod 755 /etc/init.d/redmine-stop.sh
  64. sudo service postgresql stop
  65. sudo service apache2 stop
  66. exit
  67. exit
[Dockerイメージの生成(ホストOS上で実行)]
  1. docker stop redmine
  2. docker commit redmine ubuntu1804:redmine
[DockerイメージからRedmineを展開(ホストOS上で実行)]
  1. docker run -itd --privileged -p 8080:80 --name sample ubuntu1804:redmine
  2. docker exec sample /etc/init.d/redmine-start.sh
[Redmineコンテナの停止]
  1. docker exec sample /etc/init.d/redmine-stop.sh
  2. docker stop sample
[Redmineコンテナの起動]
  1. docker start sample
  2. docker exec sample /etc/init.d/redmine-start.sh
[Redmineの起動を確認]
  1. 手元PCのウェブブラウザで http://RedmineのIPアドレス:8080/ に接続する
Read more →

nginxと連携してPythonを動かす

[基本環境]
  • Ubuntu 18.04
  • nginx 1.14
[注意]
  • PythonでCGIは…と思う人にはお勧めしません
[nginxとfcgiwrapのインストール]
  1. sudo apt update
  2. sudo atp upgrade
  3. sudo apt install python3 nginx-full fcgiwrap vim
  4. sudo vi /etc/nginx/fcgiwrap.conf
  5. cd /var/www
  6. sudo mkdir cgi-bin
  7. sudo chmod 755 cgi-bin
  8. sudo vi /etc/nginx/sites-availabel/default
    server{…}の中に、include fcgiwrap.conf; を追加する
  9. sudo service nginx restart
  10. sudo service fcgiwrap restart
  11. cd cgi-bin
  12. sudo vi test.py
  13. sudo chmod 755 test.py
[CGIの動作確認]
  1. http://IPアドレス/cgi-bin/test.py
Read more →

PythonでDockerを制御する

[基本環境]
  • Python 3.7.3
  • Docker 19.03.8
[注意]
  • Docker SDK for Pythonを基にしたDocker制御ではない
  • Subprocessを基にしたDocker制御である
  • Dockerのオプションを多様したいなら、結局、Subprocessに落ち着く
[Dockerコンテナ一覧の取得]
  • Dockerコマンドなら
    • docker ps -a
  • Pythonコードなら
    1. import subprocess
    2. comp = subprocess.run([‘docker’, ‘ps’, ‘-a’], encoding=‘utf-8’, stdout=subprocess.PIPE)
    3. print(comp)
[Dockerコンテナの起動]
  • Dockerコマンドなら
    • docker run -itd --priviledged -p 80:80/tcp --name websrv debian:stable
  • Pythonコードなら
    1. import subprocess
    2. comp = subprocess.run([‘docker’, ‘run’, ‘-itd’, ‘--priviledged’, ‘-p’, ‘80:80/tcp’, ‘--name’, ‘websrv’, ‘debian:stable’], encoding=‘utf-8’, stdout=subprocess.PIPE)
    3. print(comp)
[まとめ]
  • subprocess.runの第一引数のリストにコマンドとオプションを列挙することで、オプションが増えても気にせず実行できる
Read more →