2021/12/31

Synology NASのGitLabでGitLab Pagesを有効化する

概要

SynologyのNASには,GitLabを動作させることができるモデルがあります. 既定ではGitLab Pagesは無効になっていますが,環境変数を設定することで有効にすることができます. 本記事では,この環境変数の設定例を紹介します.

開発環境

製品型番 DS918+
DSM 6.2.4-25556 Update 2
GitLab Version: 13.12.2-0073

前提条件

GitLabは,下記のように http://hogehoge.internal:30000/ でログインできるようにGitLabの環境変数とDNSサーバを設定済みとします.

可変
GITLAB_HOST hogehoge.internal
GITLAB_PORT 30000

設定方法

Gitlab Pages Access Control用の情報を取得する

下記リンクの説明を参照して,GitLabの管理者エリア > アプリケーションで設定を行います.

DNSサーバの設定を変更する

GitLab Pages用にAリソースレコードおよびAAAAリソースレコードを追加します.

名前 情報
名前 *.pages.hogehoge.internal.
情報 Synology NASのIPアドレス

GitLabを停止させる

環境変数を変更するので,GitLabを一時停止します.DSM上でGitLabはDockerコンテナとして動作しています. GitLabのDockerコンテナはDockerのUIからも停止できますが,GitLabは3つのDockerコンテナで構成されているので,私は念のためパッケージセンターのGitLabのメニューから停止するようにしています.

DSMにログインしてパッケージセンターを開き,「インストール済」タブからGitLabをクリックします.GitLabは実行中になっているので,「停止」をクリックしてこれを停止します. 「このパッケージを停止しますか?」と聞かれるので「はい」をクリックします.

パッケージセンター

Dockerコンテナの編集画面を開く

次にDokcerを開きます.「synology_gitlab」で始まる3つのコンテナが停止していることを確認して,「コンテナ」タブで「synology_gitlab」を選択した状態で「編集」をクリックします.

Docker

環境変数を設定する

「編集 - synology_gitlab」ウィンドウが開くので,下表の新規追加します. なお,SynologyのGitLabはsameersbn/docker-gitlabをベースにしているようですので,このリポジトリの説明が参考になりました.

編集 - synology_gitlab
可変
GITLAB_PAGES_ENABLED true
GITLAB_PAGES_DOMAIN pages.hogehoge.internal
GITLAB_PAGES_PORT 30000
GITLAB_PAGES_ACCESS_CONTROL true
GITLAB_PAGES_ACCESS_CONTROL_SERVER http://hogehoge.internal:30000/
GITLAB_PAGES_ACCESS_CLIENT_ID アプリケーションID欄に表示されている文字列
GITLAB_PAGES_ACCESS_CLIENT_SECRET 秘密欄に表示されている文字列
GITLAB_PAGES_ACCESS_REDIRECT_URI http://projects.pages.hogehoge.internal:30000/auth

GitLabを再開させる

再びパッケージセンターを開き,「インストール済」タブからGitLabをクリックします.GitLabは停止になっているので,これを再開します. 再開してからGitLabにが起動してアクセス可能になるまではしばらくかかります.

これでGitLab Pagesが有効になりました.管理者エリアのダッシュボードでGitLab Pagesにチェックボックスが入っていることを確認します.

2021/12/29

ThinkPad USBトラックポイントキーボードの足を3Dプリンタで作成する

概要

学生の頃から愛用しているThinkPad USBトラックポイントキーボードの足が折れてしまいました.経年劣化なので仕方ないです. 既に販売終了になってだいぶ経つ製品で同じものが入手できません. 足が折れただけでその他は問題がないですし,気に入っているため,出来ればまだ使い続けたい.そこで,代わりの足を3Dプリンタで作ってみました.

3Dプリンタで作成したThinkPad USBトラックポイントキーボードの足

3Dモデリング

最初に誰かが既に作った3Dモデルが公開されていないかを検索しましたが,私の所有する55Y9053に適合するものは見当たりませんでした. 他の製品のものはいくつか見つかりました.現行製品のトラックポイントキーボードも同じように足が折れたという話を聞いたことがありますので,考えることは皆さん同じのようです. 仕方がないので自分でモデリングすることにしました.

モデリング環境は下表のとおりです.ソフトウェアは全てフリーウェアです. FreeCADでモデリングしたものをSTLでエクスポートし,Ultimaker CuraでスライスしてGコードを生成しています.

OS Ubuntu 20.04.3 LTS
FreeCAD 0.18.4
Ultimaker Cura 4.11.0

モデリングにあたっては折れた足にノギスを当てて寸法を測りました. しかし,足のゴム部分はすり減っていたため元の正確な寸法はわかりませんし,角部分の複雑な曲線を完全に再現するのは私には難しいため妥協しています.

FreeCADによるモデリング

作成した3DモデルのSTLは,Thingiverseでダウンロード可能です.

3Dプリント

今回初めてABS樹脂を使ってみたのですが反りが大きかったため,最終的にはPLA樹脂を使いました.

3Dプリンタ KINGROON KP3S
フィラメント ANYCUBIC PLA 白

接地しない大きな突起部分にはサポート材を付加しています. プリント設定はUltimaker Curaのプリセットの標準品質からほとんど変えていませんが,内部は充填率を60%としキュービック構造にしています. プリント設定は3Dプリンタやフィラメントにもよると思いますし,私は素人であることに留意してください.

Ultimaker Curaによるスライス

完成写真

実用上問題ないものを作成できました.ただし,寸法や丸みの再現が忠実でないためか,足を立てたときの「カチッ」というラッチ感がやや弱い気がします.

3Dプリンタで作成したThinkPad USBトラックポイントキーボードの足
3Dプリンタで作成したThinkPad USBトラックポイントキーボードの足
2021/12/27

Synology NASのGitLabにGMailのSMTP設定を行う

概要

SynologyのNASには,GitLabを動作させることができるモデルがあります. 初回セットアップやアップデートも簡単にできるようになっているのですが,GitLabのアップデートを行うと環境変数が初期化されてしまいます. おそらく初回セットアップ時点での環境変数に戻ってしまうものと考えられ,初回セットアップ後に環境変数をカスタマイズしている場合は再設定が必要です. これまではその場しのぎで環境変数の設定内容を控えておらず,アップデートする度に設定内容を思い出す必要がありました. 環境変数のうちGitLabからのメール配信に必要なSMTP設定について,備忘録としてここにメモしておきます.

開発環境

製品型番 DS918+
DSM 6.2.4-25556 Update 2
GitLab Version: 13.12.2-0073

設定方法

GitLabを停止させる

環境変数を変更するので,GitLabを一時停止します.DSM上でGitLabはDockerコンテナとして動作しています. GitLabのDockerコンテナはDockerのUIからも停止できますが,GitLabは3つのDockerコンテナで構成されているので,私は念のためパッケージセンターのGitLabのメニューから停止するようにしています.

DSMにログインしてパッケージセンターを開き,「インストール済」タブからGitLabをクリックします.GitLabは実行中になっているので,「停止」をクリックしてこれを停止します. 「このパッケージを停止しますか?」と聞かれるので「はい」をクリックします.

Dockerコンテナの編集画面を開く

次にDokcerを開きます.「synology_gitlab」で始まる3つのコンテナが停止していることを確認して,「コンテナ」タブで「synology_gitlab」を選択した状態で「編集」をクリックします.

環境変数を設定する

「編集 - synology_gitlab」ウィンドウが開くので,下表の新規追加します. なお,SynologyのGitLabはsameersbn/docker-gitlabをベースにしているようですので,このリポジトリの説明が参考になりました.

GMailを使用している場合は二段階認証を設定していると思います.この場合,SMTP_PASSには通常ブラウザからGMailにログインする際に入力するパスワードは使用できませんので,アプリパスワードを発行する必要があります.

可変
SMTP_ENABLED true
SMTP_DOMAIN www.gmail.com
SMTP_HOST smtp.gmail.com
SMTP_PORT 587
SMTP_USER your_account@gmail.com
SMTP_PASS your_app_password
SMTP_STARTTLS true
SMTP_TLS false
SMTP_OPENSSL_VERIFY_MODE none
SMTP_AUTHENTICATION login

GitLabを再開させる

再びパッケージセンターを開き,「インストール済」タブからGitLabをクリックします.GitLabは停止になっているので,これを再開します. 再開してからGitLabにが起動してアクセス可能になるまではしばらくかかります.

メールが配信されるようになっているかどうかは,メールアドレスの追加やユーザの新規作成で確認できます.

2021/12/02

Arduino: 複数のLEDを別々の周期やON/OFF比で点滅させる

概要

Arduinoに複数のLEDを接続したとき,LED毎に異なる周期で点滅させる方法です. また,この方法では点灯時間と消灯時間も個別に設定することが可能です.

実行例で使用しているソースコードでは,3つのLEDを下記のような設定で点滅させています.

番号 発光色 周期 [ミリ秒] 点灯時間 [ミリ秒] 消灯時間 [ミリ秒]
LED1 2000 1000 1000
LED2 1000 800 200
LED3 2000 500 1500

デモ

先に実行例をどうぞ.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン10番, 11番および12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. 逆にしたい場合は,ソースコードの14行目と15行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1, R2, R3 炭素皮膜抵抗 各社 1/4W 330Ω 3 1円 (互換品)
LED1 LED 各社 赤色 1 10円 (互換品)
LED2 LED 各社 橙色 1 20円 (互換品)
LED3 LED 各社 緑色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

簡単にソースコードを説明します.

  • 17行目からLED点滅クラスを定義しています.このクラスで,各LEDの接続ピン,点灯時間,消灯時間,点灯状態および前回に点灯状態が変化した時刻を管理します
  • 58行目からはLED点滅クラスのコンストラクタです.各メンバ変数を設定し,LEDを消灯状態に初期化します.このときの時刻をmillis()で取得してm_prev_timeに保存します
  • 72行目からはLED点滅クラスの点灯状態を更新するメソッドです.millis()で取得した現在の時刻と前回に点灯状態が変化した時刻m_prev_timeの差分が点灯時間m_on_timeもしくは消灯時間m_off_timeを超過しているとき,点灯状態を更新します.
  • 108行目からのセットアップ関数で行う処理はありません
  • 115行目からのループ関数では,120行目付近で各LEDのインスタンスを作成しています.これらはstatic変数なのでプログラムの終了まで保持されます.126行目付近でupdate()メソッドを実行しており,毎ループでLEDの点灯状態を更新しています

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介

2021/12/01

Arduino: タクトスイッチが押されたらLEDを5回点滅させる

概要

Arduinoに接続されたタクトスイッチ(ボタンスイッチ)が押下されたとき,LEDを5回点滅させてその後は再びボタンスイッチが押下されるまで消灯状態を維持するプログラムを紹介します. ボタンスイッチの押下判定方法や一定回数同じ処理を繰り返す方法の参考になれば幸いです.

デモ

先に実行例をどうぞ.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン2番にボタンスイッチを接続してください.なお,ボタンスイッチはActive Lowとしています.つまり押しているときはLOW,離しているときはHIGHです. デジタルピン12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. LEDをHIGH出力で点灯,LOW出力で消灯にしたい場合は,ソースコードの14行目と15行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円 (互換品)
SW1 ボタンスイッチ 各社 1 10円 (互換品)
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円 (互換品)
LED1 LED 各社 緑色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

実行例で使用しているソースコードでは,LEDを下記のような設定で点滅させています.

番号 発光色 周期 [ミリ秒] 点灯時間 [ミリ秒] 消灯時間 [ミリ秒] 点滅回数 [回]
LED1 1000 500 500 5

簡単にソースコードを説明します.

ボタンスイッチについては20ミリ秒周期(INTERVAL_TIME)状態(btn_val)を確認し,2回連続(BTN_COUNT_THRESH)で同じ状態(btn->last_val)だった場合その状態をボタンスイッチの状態(btn->state)としています. これはボタンスイッチのチャタリングによる誤動作を低減するための処理です.

LEDの点滅状態を列挙型で表現しています(LED_BLINK_STATE_E)現在のLEDの点滅状態(led_blinking_state)によって処理を切り替えています初期のLEDの点滅状態はLED_STOP_OFFです. LEDが点滅停止中の場合,つまりled_blinking_stateがLED_STOP_OFFの場合は,led_blinking_startがtrueになるまで状態遷移しません. LEDが点滅中の場合,つまりled_blinking_stateがLED_BLINK_ONもしくはLED_BLINK_OFFの場合は,led_blinking_periodがインクリメントされます.これは何周期同じ点滅状態に留まっているかを示しています.1周期は20ミリ秒周期(INTERVAL_TIME)です. led_blinking_periodが25(LED_BRINK_PERIOD)を超過したとき,つまり20ミリ秒 x 25 = 500ミリ秒を超過したときに状態遷移が発生します. LED_BLINK_ONの場合はLED_BLINK_OFFに遷移します. LED_BLINK_OFFの場合は,LEDの点滅回数(led_blinking_count)がインクリメントされます. led_blinking_countが5(LED_BRINK_COUNT)を超過したとき,LEDの点滅は終了してLED_STOP_OFFに遷移します.それ以外の場合はED_BLINK_ONに遷移します.

セットアップ関数ではボタンスイッチとLEDの初期化を行い,周期実行用の変数に初期値を代入します.

ループ関数では,233行目で現在の時刻を取得しています.現在の時刻と前回に周期実行を行ったときの時刻との差分がinterval_timeを超過した場合は,周期実行を行います.ボタンスイッチの状態を確認し,ボタンスイッチが押下されている場合LEDの点滅を開始します

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介