カテゴリー: Linux Page 4 of 35

自分用Redmineのステータスと評価。

自分のタスクやスケジュール管理に利用しているRedmine。

ステータスという呪文

作って間もない頃はプロジェクトやトラッカーに合わせて専用のステータスを作っていましたが、

「どれがどの状態か不明」

という状況に陥りました。

自分にとって必要なのは

  • ボールは自分にあるのか?
  • 相手にあるならいつチェックするのか?
  • フィードバックは必要か?

の3つぐらいだという結論。人に任せるわけでもない自分のタスク管理なので、ステータスはプロジェクト共通でいいと判断。

ステータス説明
Alohomora(開けよ)新たにチケットを発行するとき
Locomotor(動け)チケットを開始する
Arresto Momentum(遅く)様子見の必要があるため、一時的に中断したい場合
Depulso(除け)ボールが自分にあるとき。すなわち、自分の案件を押しつける。
Accio(来い)ボールが他人にあるとき。すなわち、状況を呼び寄せる。
Lumos(光よ)案件にスポットライトを当てる。フィードバック待ちのとき。
Obliviate(忘却せよ)準備が整って、実行するだけのチケット。なので、時期が来るまで忘れてもいいステータス。
Finito(終われ)案件が解決し、チケットを終わらせるとき
Avada Kedavra(息絶えよ)却下されたり却下したなどで、未解決状態でチケットをクローズ

『ハリー・ポッター』シリーズで出てくる呪文と擬えました。これなら、分かりやすく、必要なステータスのみに集中できます。

評価

そして、自分が発行したチケットは「期待通りか」のフィードバックが必要だと思いまして、カスタムフィールドを利用して、以下の形にしました。

  • U:不明 / Ungraded and Unglued
  • O:優 / Outstanding
  • E:良 / Exceeds Expectations
  • A:可 / Acceptable
  • P:不可 / Poor
  • D:落第 / Dreadful
  • T:トロール並 / Troll

「Ordinary Wizard's Level:OWL」試験の評価に、現段階では評価できない不明「Ungraded and Unglued」を加えました。

自分だけが使うツールは、こういう遊びの余地があるから好きです。

ChatGPTによるRubyスクリプト。(対話式パスワード生成)

前回作成したパスワード生成スクリプト。変数で指定するのはCron処理などでは便利でしたが、日常には不向き。

そこで、再びChatGPTに相談し、

以下の要件でスクリプトを作成です。

要件

  • スクリプトを実行する
  • 発行強度を1~3で指定する (空エンターは中)
    • 1:弱 8桁/英数字のみ
    • 2:中 10桁/小文字・大文字・英数字と単純な記号
    • 3.強 12桁/小文字・大文字・英数字と複雑な記号
  • 表示するパスワードの数を数字で指定する (空エンターは4個)

スクリプト

できあがったのがこちら。

  • password_generate.rb
def generate_password(length, complexity, password_count)
  case complexity
  when 1
    chars = [('a'..'z'), (0..9)].map(&:to_a).flatten
  when 2
    chars = [('a'..'z'), ('A'..'Z'), (0..9), ['!', '@', '#', '$', '%', '^', '&', '*']].map(&:to_a).flatten
  when 3
    chars = [('a'..'z'), ('A'..'Z'), (0..9), ['!', '@', '#', '$', '%', '^', '&', '*'], ['-', '_', '=', '+', '<', '>', '?']].map(&:to_a).flatten
  else
    puts "無効な発行強度です。"
    return
  end

  password_count.times do |i|
    password = (0...length).map { chars[rand(chars.length)] }.join
    puts "Password #{i + 1}: #{password}"
  end
end

def get_complexity
  print "発行強度を1から3の範囲で入力してください (デフォルトは2):\n"
  complexity_input = gets.chomp

  complexity = complexity_input.empty? ? 2 : complexity_input.to_i

  until (1..3).cover?(complexity)
    print "有効な範囲で入力してください(1から3): "
    complexity = gets.chomp.to_i
  end

  complexity
end

def get_password_count
  print "表示するパスワードの数を入力してください (デフォルトは4): "
  count_input = gets.chomp

  count = count_input.empty? ? 4 : count_input.to_i

  count
end

puts "パスワードを生成します。"
complexity = get_complexity
password_count = get_password_count

case complexity
when 1
  generate_password(8, complexity, password_count)
when 2
  generate_password(10, complexity, password_count)
when 3
  generate_password(12, complexity, password_count)
end

実行例

ruby password_generate.rb
発行強度を1から3の範囲で入力してください (デフォルトは2):
2
表示するパスワードの数を入力してください (デフォルトは4): 9
Password 1: ILAXRn!O47
Password 2: P^qmiduucK
Password 3: 8ytFezU%fU
Password 4: O!6OFeHgYe
Password 5: Ua&!Ryg039
Password 6: &T@AtiNpWy
Password 7: Jz8jyPbp#3
Password 8: HOWE66ki1I
Password 9: 9WRdsHhk*H

再評価の全文検索プラグイン。(Redmine 5.1検証)

ほぼ一年前、涙を呑んでアンインストールした全文検索プラグイン。

事情が変わったので再評価です。

理由1:プラグインでの支障が無くなった

これを諦めた最大の理由は、knowlegebaseプラグインの存在。

各種文書を記録できるこのプラグインは、導入当初:このプラグインがRedmine 4.2までしか対応していないからバージョンを落として使っていたほどです。

ところが5.0以降では(githubでは)使えないということで開き直ることができました。

knogwlegebaseという足かせがなくなれば、

  • チケットを細かく検索できる
  • 設定によって類似したチケットを表示する

このプラグインは高評価となります。

理由2:文書の保管に適したツールを見つけた

Bookstackを見つけたのが思いのほか大きいです。これによって、Wiki形式の文書のストックをこちらに出すことができます。

こちらも全文検索機能付きでバージョン管理も容易。

「使った当初は諦めたけど、事情やバージョンにより評価が変わる」話でした。

Redmine 5.1でのリマインダー設定。

概要

Redmine 4.1と同じような仕組みが構築できました。

前提

Redmineでメール送信ができることです。

手順

スクリプトを作成します。

  • ファイル名 `redmine_reminder.sh`
  • スクリプト内容
#!/bin/sh

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

cd /home/www-data/redmine
# 自分が格納しているRedmineのルートディレクトリ
bundle exec rake redmine:send_reminders days=7 RAILS_ENV=production
# この例では7日前に通知します。days=nの部分を変えることで日数を指定できます

作成後、以下を実行して実行権限を付与します。

sudo chmod +x redmine_reminder.sh

  • Crontab編集
sudo crontab -l -u -root
  • 記入例
30 15 * * * /path/to/script/directory/redmine_reminder.sh
# スクリプトを格納したディレクトリを指定します

編集後、指定した時刻にメールが送られてくれば成功です。

BookStackをnginxで動かす場合の設定。

デスクトップPCとしてのLinux利用(Kubuntu 22.04インストール後にやったこと) – Manualmaton's Laboratory

こちら、ローカルサーバとして運用することにしています。

公開しているサイトと異なりnginxで動かしているので、その場合のメモです。

環境

  • Ubuntu 22.04
  • 適切に名前解決できる
  • ドメイン名に沿った証明書がある
    • 筆者はmkcertでローカル証明書を作っています

インストールして最初の設定が終わっている状態です。

nginxインストール

sudo aptitude install nginx

mysqlインストール

sudo aptitude install mysql-server mysql-client libmysqlclient-dev

sql設定変更

sudo cp -pi /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/mysqld.cnf.$(date +%Y%m%d)
# 任意のバックアップディレクトリを指定します。
# .$(date +%Y%m%d)をつけることで、バックアップファイルは当日日付(YYYYMMDD形式)で記録されます

diff -u /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/mysqld.cnf.$(date +%Y%m%d)
# バックアップが取れていることを「差分が存在しないこと」で確認します

echo -e "default_authentication_plugin=mysql_native_password" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf
# mysqld.cnfに追記をします

MySQL再起動

sudo systemctl restart mysql.service

MySQLのrootパスワード変更

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
exit

運用に合わせて適切なパスワードを設定します。

mysql-secure-installation

sudo mysql_secure_installation

詳しい設定は以下に記しています。

https://atelier.reisalin.com/projects/zettel/questions/5-mysql_secure_installation

phpのインストール

https://barrel.reisalin.com/books/nextcloud/page/1-1-nextcloud

自サイトを参考にしていますが、一部異なります。

PHPレポジトリを追加して必要パッケージをインストールします。

  • レポジトリ追加
sudo add-apt-repository ppa:ondrej/php

Ubuntu20.04系ではこれを行わないとPHP7.4系しかインストールされません。

  • パッケージアップデート
sudo aptitude update
  • php インストール
sudo aptitude install php8.1
sudo aptitude install php8.1-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev,fpm}
#fpmを入れる必要あり

nginx環境でも動かすため、php(バージョン)-.fpmを入れます。

  • apache無効化
sudo disable apache2.service

依存関係でapache2も一緒にインストールされるので、ここで停止させます。

Composerインストール

https://barrel.reisalin.com/books/bookstack/page/bookstackubuntu2004

同じくこちらにメモを残しています。

  • インストール
  • ディレクトリ移動
cd /hoge

任意の作業ディレクトリに移動します

  • インストーラーのダウンロード
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • インストール
sudo php composer-setup.php
  • インストーラーのリンク解除
sudo php -r "unlink('composer-setup.php');"
  • コマンドのパスを移動
sudo mv composer.phar /usr/local/bin/composer
  • composerに実行権を付与
sudo chmod +x /usr/local/bin/composer
  • バージョン確認
composer --version

バージョンが表示されることを確認します。

DBを作成します。

  • mysqlログイン
mysql -u root -p
CREATE DATABASE bookstack character set utf8mb4;
CREATE USER 'bookstackuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON bookstack.* TO 'bookstackuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

DB名/パスワードはポリシーに応じて適切なものを指定します。

BookStackの配置

  • プログラム配置
cd /home/www-data
# パーティションの都合上、/home/www-dataに置いています。
# 環境に合わせて適切なWebサービス公開ディレクトリを指定してください。

sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch 
sudo chown -R www-data:www-data BookStack
cd BookStack
  • 設定ファイル編集
sudo cp -pi .env.example .env

教義・信仰に沿ったエディタで以下を編集します。

APP_URL=https://hoge.example.com
# 公開用URLを指定します

# Database details
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=password
# DB名、パスワードなどは先ほど作成したものです。
  • マイグレート
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan db:seed --force
sudo -u www-data php artisan migrate --force

Nginx設定

  • 設定ファイル作成
    • /etc/nginx/site-available/bookstack.conf
  • ファイル内容
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    # サーバ名を指定します。
    server_name  hoge.example.com;
        server_tokens off;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
        add_header Strict-Transport-Security 'max-age=63072000';

    # 任意のログディレクトリを指定します。
    access_log  /var/log/nginx/bookstack/access.log;
    error_log   /var/log/nginx/bookstack/error.log;
    # SSL証明書を指定します。
    ssl_certificate      /path/to/ssl_certificate/hoge.crt;
    # SSL秘密鍵を指定します。
    ssl_certificate_key  /path/to/ssl_key/hoge.key;

    # BookStackが置かれているディレクトリです。/publicは必ず指定します。
    root /home/www-data/BookStack/public;
    index index.php index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

# 強制的にhttps通信
server {
    listen       80;
    listen       [::]:80;
    server_name  veritas.lumos;
    return 301   https://$host$request_uri;
}

nginx設定を有効化します。

  • ディレクトリ移動
cd /etc/nginx/sites-enabled
  • 初期設定ファイルを無効
sudo unlink default
  • 設定有効化
sudo ln -sf /etc/nginx/site-available/bookstack.conf bookstack.conf
  • 構文チェック
sudo nginx -t

エラーがないことを確認します。

  • nginx再起動
sudo systemctl restart nginx.service

インストール確認

設定したドメインにブラウザでアクセスし、ログイン画面が出てくれば成功です。

Linuxを入れたLet’s noteにWebアプリを導入。

週末はこちらの設定をずっと行っていました。

Growiのインストール

これは絶対に行いたいものでした。「個人のWiki/メモサイト」という性質上、宅内NWにしか置けなかったものです。

しかし、階層ごとに文書を管理したり、各種Markdownの入力補助が豊富なこのシステムは一丁目一番地として導入したいと考えていました。

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/77

のサイトを参考に、ローカルホストでのみ動くGrowiがようやく完成です。

BookStack

これもこれで入れておきたいシステム。Growiが日付ごとの記録を行ってくれるなら、こっちは分野ごとの整理にちょうどいいのです。

https://barrel.reisalin.com/books/bookstack/chapter/1bookstack

こちらの自サイトを参考にインストールしていったものの、Growiのリバースプロキシにnginxを利用したため、導入は少し勝手が違いました。

その当たりのルールは改めて記述するとして

無事、動いたことが確認できて良かったです。

デスクトップPCとしてのLinux利用(Kubuntu 22.04インストール後にやったこと)

概要

中古のLet's noteにKubuntu 22.04を入れたので、デスクトップPCのセットアップを行いました。

デスクトップ側での手順-1-

SSHのインストール

同一NW内のデスクトップなので、リモートアクセスで操作しやすいようにします。

sudo aptitude install ssh

リモート側(クライアント)でのSSHを利用してのインストール

ここからはSSHでログインして作業を行います。

パッケージ一新

sudo aptitude upgdate && sudo aptitude upgrade
  • 再起動
sudo reboot

日本語入力化

Kubuntuは何故か日本語入力システムがインストールされていません。

sudo aptitude install fcitx-mozc

Edgeインストール

好みの問題でEdgeを入れます。

  • 必須パッケージを入れる
 sudo aptitude install git build-essential apt-transport-https 

この機会に開発パッケージも入れます。

  • リポジトリ鍵追加
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
  • リポジトリ追加
 sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main"
  • リポジトリ追加後のパッケージアップグレード
sudo aptitude update
  • インストール
sudo aptitude install microsoft-edge-stable

Linuxデスクトップ再起動

sudo reboot

デスクトップ側での手順-2-

  1. Linuxデスクトップにログインします。
  2. 日本語入力ができることを確認します。
  3. ブラウザがインストールできることを確認します。

中古PCの入手とLinuxインストール。

きっかけ

ChromebookでのLinux運用が厳しくなってきたことがまずありました。

Play Storeでアプリは揃えられるものの、一部がスマートフォン専用だったり、ファイル操作に難があるというのにも難がありました。

そんな矢先、Windows10のサポート終了が近づいているのでWindows11未対応のノートPCが市場にかなり出回るようになってきたという話を聞き、秋葉原で発見。

Let's note CF-XZ

Let's noteのCF-XZです。

  • Core i-5 7300
  • 8GB Memory
  • 256GB SSD

と、基本的なスペックはあります。

こちらのRELEASEが示すように画面自体が取り外せる(つまり、画面自体をタブレットとして利用可能。

Linuxインストール

  • 通常と異なる機能が備わっている
  • 画面タッチは対応しているのか
  • そもそもインストールできるのか

がLinux化の懸念点ではありましたが、Kubuntu 22.04は正常にインストールできました。

  1. 公式サイトからイメージをダウンロード
  2. Rufusを使ってブートドライブ作成
  3. ノートPCのBIOSを起動
  4. ブートドライブから起動
  5. インストーラーの指示に従う(デュアルブートは考えていません)

で、無事にインストール完了。無線LANは確認しました。(優先はこれから確認です)

画面の切り離しやタッチ操作なども可能でした。

これから

  • 完全なローカルサーバ化
  • Webアプリのインストール
  • その他、検証

など、すき煮やっていく予定です。

シェルスクリプト:秘密鍵を用いたLinuxサーバへのログインスクリプト。

概要

SSH接続しているLinuxクライアントから別のLinuxサーバにSSHログインする際の効率化を図るスクリプトです。

通常のコマンドを用いた秘密鍵を用いたアクセス

ssh -i /path/to/private_key username@server_host

と、-iの後に秘密鍵を指定し、ユーザ名@サーバ名/IPアドレスを入力するのはちょっと面倒なので、コマンド一発で接続できるようにします。

前提

  • Linuxサーバの秘密鍵を有していること。
  • 秘密鍵に適切なパスワードがかけられていること。

スクリプト

  • ssh_server.sh

serverの部分を任意のホスト名にすると便利です

#!/bin/bash

# 変数定義
## 接続先のサーバ名/IPアドレス
server_host="your_server_host"
## 接続先でログインするアカウント名
username="your_username"
## 秘密鍵のファイルパスを絶対パスで表記
private_key_path="/path/to/private_key"
## 接続時間を記録するログのディレクトリパスを絶対パスで表記
log_directory="/path/to/logs"


# ログディレクトリが存在しない場合は作成する
if [ ! -d "$log_directory" ]; then
    mkdir -p "$log_directory"
fi

# 現在の日付と時刻を取得
current_datetime=$(date +"%Y%m%d%H%M")

# ログファイルのパス
log_file="$log_directory/$server_host$current_datetime.log"

# 秘密鍵の存在チェック
if [ ! -f "$private_key_path" ]; then
    echo "$(date): Error - 秘密鍵ファイルが見つかりません: $private_key_path" >> "$log_file"
    exit 1
fi

# 秘密鍵のパーミッションが600であるかのチェック
if [ $(stat -c %a "$private_key_path") -ne 600 ]; then
    echo "$(date): Error - 秘密鍵のパーミッションが正しくありません (600 である必要があります): $private_key_path" >> "$log_file"
    exit 1
fi

# SSH接続
echo "$(date): SSH接続を試行します: ssh -i $private_key_path $username@$server_host" >> "$log_file"
ssh -i "$private_key_path" "$username@$server_host"
echo "$(date): SSH接続が正常に終了しました" >> "$log_file"
  • 実行権付与
chmod +x ssh_server.sh

動き

./ssh_server.sh

を実行後、秘密鍵のパスワード入力画面が出てきます。認証後、接続先のプロンプトが返ってくれば成功です。

Redmine5.1検証-4.2で使っていたプラグインの稼働可否(動いたプラグイン)-

概要

Ubuntu 20.04系のEOLに備えて、Redmineも5.1で動かし筒あります。そんな中で、「今まで使っていたプラグインが動くかどうかを確かめました。

動いたプラグイン

まずは動いたプラグインです。

プラグイン名機能URL備考
Redmine Logsログの表示や削除を行うhttps://github.com/haru/redmine_logs最初に入れます(障害切り分けのため)
Additionals様々なマクロを提供https://github.com/alphanodes/additionals使い勝手が大きく変わります
Additonal Tagsチケットのタグ付けを行うhttps://github.com/alphanodes/additional_tags/上記、Addtionalsが必須です
full_text_searchチケット全文検索https://github.com/clear-code/redmine_full_text_search逆に4.2で動かしていなかったものです
RedMica UI extensionMermaid対応/バーンダウンチャート追加などhttps://github.com/redmica/redmica_ui_extensionこれも最初の方に入れるプラグインです
DMSFファイル機能拡充https://www.redmine.org/plugins/redmine_dmsfRedmineが機能不全に陥る可能性がありますのでインストール時は要注意
Redmine Issue Badge割り当てられているチケットの数を表示https://github.com/akiko-pusu/redmine_issue_badgeモチベーション維持に有用です
Redmine Issue Templateチケットやコメントのテンプレート化https://github.com/agileware-jp/redmine_issue_templates4.2対応版とメンテナが変わっています。
Redmine Local Avatarsアカウントのアイコンを任意の画像に変えるhttps://github.com/ncoders/redmine_local_avatarsこれも個人で使っているならモチベーション維持につながります
Redmine Message Cutomize各種用語を変更しますhttps://github.com/farend/redmine_message_customizeローカライズされていないもの(誤訳)などに対応
Redmine View Customize見た目や機能の拡充など、Redmineにおけるアーミーナイフのような頼れる存在ですhttps://github.com/onozaty/redmine-view-customize非常に優先度が高いプラグインです

動かなかったプラグインやワークアラウンドは後日。

Page 4 of 35

Powered by WordPress & Theme by Anders Norén