カテゴリー: Linux Page 5 of 36

中古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非常に優先度が高いプラグインです

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

MySQLコンソールにログインせず、使われているテーブルの名前を検索する。

コマンド概要

MySQLのテーブルを検索する際、「使われているテーブルの名前を知りたい」時に使います。

コマンド

テーブルの一覧を確認する

mysql -u [user] -p -D [DB] -e "show tables"
mysql -u root -p -D redmine -e "show tables"

ここでは、DB:redmineのテーブル一覧を確認しています。 (rootユーザを用いています。特権などにより、適切なアカウントを指定してください)

特定の文字列が使われているテーブルを一覧表示する

mysql -u [user] -p -D [DB] -e "show tables like '%[文字列]%'"
mysql -u root -p -D redmine -e "show tables like '%issue%'"

ここでは、DB:redmineから、「issue」を含むテーブルのみを一覧表示します。

いちいち、

mysql -u [user] -p

の後に

USE [DB名];
SHOW TABLES LIKE '%issue%';

QUIT

と打ち込むより早いワンライナーでした。 (パスワードを入力するので厳密には異なりますが)

Redmine View Customize Pluginでのアイコンサイズ変更。

やりたいこと

Redmineのチケット表示画面に出てくるこのアイコンを大きくします。

環境

  • Redmine 4.2 Redmine 5.1
  • 要:ViewCustomize Pluginの導入

共通手順

  1. Redmineに管理者権限でログインします。
  2. 管理>表示のカスタマイズに移動します。
  3. 「新しい表示のカスタマイズ」をクリックします。

カスタマイズ1

以下の通り指定します。

  • パスのパターン:空白
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
  • コード
$(document).ready(function() {
  // 表示環境やテーマに合わせて任意のサイズを指定
$('.gravatar').css('width', '70px').css('height', '70px');
});

コード入力後、有効にして「保存」をクリックします。

設定反映後、

と、サイズが大きくなりました。

しかし、全てに適用されるので

ガントチャートのアイコンもそれに合わせて大きくなります。それを抑制する措置を執ります。

カスタマイズ2

以下の通り指定します。

  • パスのパターン:/gantt
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
  • コード
$(document).ready(function() {
  // 表示環境やテーマに合わせて任意のサイズを指定
   $('.gravatar').css('width', '10px').css('height', '10px');
});

適用後、

ガントチャートのアイコンサイズも設定できました。

まとめ

  • アイコンが全てに及ぶため、かなり乱暴な手を取っています。
  • そのため、カスタマイズを2つ挟む結果になりました。
  • もっとスマートな手があると思いますので、要検証です。

Redmine 5.1にIssue Template Pluginをインストール。

この記事を書いて程なくして、直々に別リポジトリにメンテナが引き継がれていたとの情報を戴きましたので、

早速、インストールします。

環境

  • Ubuntu 22.04
  • Redmine 5.1
  • Ruby 3.0
  • Apache 2.4

導入時

Gem追加:要
DBマイグレーション:要

さっくりとした手順

  1. SSHログイン後、Redmineプラグインに移動
  2. gitでレポジトリをダウンロード
  3. 新規ジェムをインストール
  4. DBマイグレーション
  5. Webサービス再起動

ディレクトリに移動します。

cd /home/www-data/redmine/plugins
# 自分の環境に合わせます。

プラグインを配置します。

sudo -u www-data git clone https://github.com/agileware-jp/redmine_issue_templates

ls -ld redmine_issue_templates

Gemをインストールします。

cd /home/www-data/redmine/plugins
# 自分の環境に合わせます。

sudo -u www-data bundle install

DBのマイグレーションを行います。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

動作

  1. Redmineに管理者アカウントでログインします。
  2. 任意のプロジェクトを選択して設定をクリックします。
  3. モジュール「チケットテンプレート」にチェックを入れて保存します。
  4. プロジェクトにチケットテンプレートのタブが表示されていれば設定完了です。

このプラグインの有無がRedmine 5.1に移行できるかの鍵の一つだったので、大いに助かりました。

Redmine 5.1に文書管理プラグイン(dmsf)をインストール。

概要

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

こちらの、Redmine5.1バージョンです。

Redmineをファイルサーバのように扱うプラグインをインストールします。

備考

  • この作業、下手すればRedmine全体が使えなくなる作業です。(実際にRedmineが使えなくなりました)
  • そのため、DBのバックアップとリストアによる切り戻し手順も込みです。

2023年11月よりMicrosoftはWebDavを「非推奨」とする方針を打ち出しているため、本手順ではWebDAV設定は省いています。

https://forest.watch.impress.co.jp/docs/news/1544482.html

プラグイン名

動作を確認した環境

  • Ubuntu 22.04
  • Ruby 3.0
  • Redmine 5.1
  • mysql Ver 8.0.35

導入時

  • 追加パッケージのインストール:要
  • Gem追加:要
  • DBマイグレーション:要

実施した手順

さっくりとならなかった手順

  1. 念のためDBバックアップ
  2. SSHログイン後、追加パッケージをインストール
  3. Redmineプラグインに移動
  4. gitでレポジトリをダウンロード
  5. 新規ジェムをインストール
  6. DBマイグレーション
  7. Webサービス再起動
  8. Redmine設定変更
  9. 切り戻し手順(それでも失敗した場合)

バックアップ取得

mysqldumpによるバックアップ

cd /hoge
# 任意のバックアップディレクトリに移動します

mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
# それぞれ -h ホスト名 -u redmine -p ユーザ オプション db名です。
# パスワードはredmineインストール時に設定したDBユーザのものです

環境が許すなら、AWSのようにシステム全体のバックアップを取った方が後腐れがありません。

動作に必要な追加パッケージのインストールと設定

追加パッケージをインストールします。

sudo aptitude install xapian-omega ruby-xapian libxapian-dev poppler-utils antiword  unzip catdoc libwpd-tools libwps-tools gzip unrtf catdvi djview djview3 uuid uuid-dev xz-utils libemail-outlook-message-perl

プラグインのインストール

プラグインを配置します。

  • 2023/01/20時点での最新バージョン3.1.3を利用します。
cd /home/www-data/redmine/plugins && pwd
# redmineのplugins配下ディレクトリに移動します。

sudo -u www-data git clone -b v3.1.3 https://github.com/danmunn/redmine_dmsf
# 念のため、バージョンを指定します。

ls -ld /home/www-data/redmine/plugins/redmine_dmsf
# このディレクトリがあることを確認します

Gemをインストールします。

cd /home/www-data/redmine/ && pwd
# 自分の環境に合わせます。

sudo -u www-data bundle install
# bundleはかなり時間がかかります。

DBのマイグレーションを行います。

cd /home/www-data/redmine/ && pwd
# 自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

Redmine設定変更

WebDAV有効化

  1. Redmineに管理者アカウントでログインします。
  2. 管理>プラグイン>DMSFの「設定」をクリックします。
  3. 以下のように修正します。
  4. 貼り付けを許可にチェックを入れ、アップロードしたファイルをチケットなどに貼り付けられるようにします。
  5. WebDav:無効(デフォルトのままです)
  6. 任意のプロジェクトに移動します。
  7. 「設定」をクリックし、「文書管理」にチェックを入れます。
  8. また、Redmine管理画面の「ロールと権限設定」で、ユーザのアクセス権を忘れないようにしてください。(「文書管理」のセクションです)

以上で設定は完了です。

おまけ:切り戻し手順

この作業、Redmine5.1より手順は楽になったとは言え:やっぱりバージョン変更や設定ミスで軽くRedmine全体が機能不全に陥ります。そのため、切り戻し手順を記しておきます。

通常の切り戻し

ディレクトリ移動

cd /home/www-data/redmine && pwd
# 自分の環境に合わせます。

プラグインアンインストール

sudo -u www-data rake redmine:plugins:migrate NAME=redmine_dmsf VERSION=0 RAILS_ENV=production

ディレクトリ削除

sudo rm plugins/redmine_dmsf -Rf

Webサービス再起動

sudo systemctl restart apache2.service

それでもダメだった切り戻し(DBリストア)

cd /hoge
# mysqldumpを行ったディレクトリ

mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# パスワードはredmineインストール時に設定したDBユーザのものです

sudo systemctl restart apache2.service

Redmine View Customizeを利用した、チケット作成時の定型文挿入。-1-(Issue Template Pluginのワークアラウンド)

概要

メインで使っているRedmineのバージョンは4.2ですが、OSのEOL等に備えて5.1での検証を始めました。

そんな中、活用しているプラグインが使えないのでその対処を行いました。

問題となったプラグイン

こちら、2024/01/19現在、Redmine5.1でインストールできませんでした。

  • チケットを発行するときの定型文を入れたい
  • プロジェクトによっては既に内容が決まっているとなおよい

をモットーにしているだけに、このプラグインが利用できないのはバージョンアップの大きな障害となります。

それを解決するため、RedmineViewCustomizeを使いました。

試した環境

  • Ubuntu 22.04
  • Redmine 5.1
  • Ruby 3.0
  • Apache / ModPassanger
  • 要:ViewCustomizeインストール

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

手順

  1. Redmineに管理者権限でログインします。
  2. 管理>表示のカスタマイズに進みます。
  3. 新しい表示のカスタマイズをクリックします。
  4. 以下の通り、コードを挿入します。

パスのパターン

  • 空白
  • 全プロジェクト

プロジェクトのパターン

空白

挿入位置

全ページのヘッダ

種別

JavaScript

コード

$(function() {
// チケット作成画面のみ対象
if ($('#issue-form').length > 0 && $('#issue_subject').val() == '') {
// 件名の先頭に定型文を追加
$('#issue_subject').val('[起票:] 『件名』(期日:) ');
// 説明に本文を追加 (自身が使うパターンで使ってください。\nで改行を入れられます。)
$('#issue_description').val('### 概要\n\n### 依頼者\n\n### 締切概算\n\n### あるべきゴール\n\n### まずすべきこと\n\n- [ ]');
}
});

コメント

チケット作成時にタイトルを追加


設定反映確認

  1. 任意のプロジェクトで新しいチケットを発行します。
  2. 以下のように自動的にタイトルと説明が入っていればOKです。

Growiの使い勝手を向上。(カスタムスクリプトの利用)

Growiが格段に使いやすくなるTIPSです。

行うこと

  • lang属性の付与

「英語のページを翻訳しますか?」

と、出る時があるので、これに対処します。

  • サイトを新しいタブで開く。

リンクは新しく開きたい派のため、こちらに対応します。

  • 画像のライトボックス化

画像を拡大表示できるようにします。

参考URL

「Growiカスタムスクリプト集」

https://qiita.com/k84rc/items/159a7399c11abd4e3587

手順

Growiに管理者権限でログインします。

ログイン後、

設定>カスタマイズに遷移します。

カスタムスクリプトを修正します。

「カスタムスクリプト」の箇所に、以下のコードを入れます。

function addLangAttrToHtmlTag() {
  var language = window.navigator.language || window.navigator.userLanguage || window.navigator.browserLanguage;
  $('html').attr('lang', language);
}
function openExternalPageInNewTab() {
  $('a[href]').each((i, elem) => {
    var url = elem.href.match(/(?:https?:\/\/([\w:%#\$&\?\(\)~\.=\+\-]+))?(\/?[\w/:%#\$&\?\(\)~\.=\+\-]+)/);
    if (url[1] !== undefined && url[1] !== document.domain) {
      elem.target = '_blank';
    }
  });
}
function applyLightBox() {
  $('head link:last').after('<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightbox2@2.10.0/dist/css/lightbox.min.css" />');
  $('head script:last').after('<script src="https://cdn.jsdelivr.net/npm/lightbox2@2.10.0/dist/js/lightbox.min.js"><\/script>');
  $('#page').find('img:not(.emojione)').each(function(i, elem) {
    var a = $('<a>').attr({'href': $(elem).attr('src'), 'data-lightbox': $(elem).attr('alt')||"nothing", 'data-title': $(elem).attr('alt')||"nothing"});
    $(elem).wrap(a);
  });
}

入力後、設定を保存します。

設定反映を確認します。

  1. Growiをログアウトし、再度入り直します。
  2. リンクが別タブで開くことや、画像が拡大表示されることを確認します。

Ubuntu : ディレクトリのバックアップスクリプト。

概要

Linux運用時、特定のディレクトリをバックアップするスクリプトです。

  1. バックアップ元とバックアップ先の変数指定
  2. 世代管理
  3. 直接実行するかCronで設定するか

の変数指定が可能です。

スクリプト内容

  • home_backup.sh

※要管理者権限

# 変数の定義
BACKUP_SOURCE="/home"
BACKUP_DEST="/backup"
GENERATION=3
VERBOSE=false  # バックアップ成功メッセージを表示するかどうか(true/false)

# 一時ディレクトリを作成
temp_dir=$(mktemp -d)

# バックアップを作成する関数
create_backup() {
    # yyymmdd形式の日付を取得
    DATE=$(date +"%Y%m%d")

    # 圧縮ファイルの名前を指定
    ARCHIVE_NAME="backup_$DATE.tar.gz"

    # rsyncを用いてディレクトリを一時ディレクトリにコピー
    rsync -a --delete "$BACKUP_SOURCE/" "$temp_dir/"

    # ディレクトリ全体を圧縮
    tar --ignore-failed-read -czf "$BACKUP_DEST/$ARCHIVE_NAME" -C "$temp_dir" .

    # 古いバックアップを削除
    delete_old_backups

    # メッセージの表示
    if [ "$VERBOSE" = true ]; then
        echo "Backup completed successfully."
    fi
}

# 古いバックアップを削除する関数
delete_old_backups() {
    # バックアップディレクトリ内のバックアップファイルを日付順にソート
    sorted_backups=($(ls -t "$BACKUP_DEST" | grep -E "backup_[0-9]{8}\.tar\.gz"))

    # 不要なバックアップファイルを削除
    while [ ${#sorted_backups[@]} -gt $GENERATION ]; do
        file_to_delete="${sorted_backups[${#sorted_backups[@]}-1]}"
        rm "$BACKUP_DEST/$file_to_delete"
        echo "Deleted old backup: $file_to_delete"
        # 削除したファイルをリストから除外
        sorted_backups=("${sorted_backups[@]:0:${#sorted_backups[@]}-1}")
    done
}

# バックアップの作成
create_backup

# 一時ディレクトリを削除
rm -r "$temp_dir"

作成後、実行権を付与します。

sudo chmod +x home_backup.sh

注意点

  • バックアップ先に十分な空き容量があることを想定しています。
  • rsyncとtarの二重処理なので、割と時間がかかります。

この辺をもう少しうまく処理したいです。

Page 5 of 36

Powered by WordPress & Theme by Anders Norén