月: 2023年1月 Page 2 of 4

和の背景。-百均グッズの撮影用小物(その40)

セリアで見つけたこのミニチュア屏風、金と黒の背景がとてもいいアクセントです。

畳と組み合わせてこの通り。

設置も簡単なのでちょっとした小物の撮影での活躍が期待されます。

NextcloudサーバのPHPアップグレードとエラー解消、そして再設定。(PHP7.4→PHP8.1)

Nextcloudを動かしている自宅サーバでPHPをアップグレード。

ちょっとだけハマったのでメモを残します。

環境

以下の環境でNextcloudを動かしています。

  • Ubuntu 20.04
  • Apache
  • MySQL
  • PHP 7.4

さっくりとした手順

  1. PHP7.4をアンインストールします。
  2. PHP8.1をインストールします。
  3. 追加モジュールを有効化します。
  4. NextCloudの追加設定を行います。

手順

  • 今回は全て通常ユーザで作業をします。
  • また、viを使わずコマンドを用いて設定を置き換えています。
  • 設定をするのはPHPのみです。他は設定の変更をしていません。
  • パッケージ/モジュールのインストールにaptitudeを用いています。好みに合わせてaptをご利用ください。

PHPの削除を行います。

sudo apt-get --purge autoremove php*

PHP8.1をインストールします。

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}

sudo aptitude install php8.1-apcu

sudo aptitude install php8.1-memcached

php -v
# PHP 8.1.14 (cli)を確認しました。(2023/01/19)

apache再起動を行います。

sudo systemctl restart apache2.service

アップグレード後にエラー。

PHPアップグレード後、Nextcloudにアクセスするとこうなりました。

前の設定が全て消えたので、エラーが発生しました。

こちらを解消していきます。

エラーチェック

cd /var/www/html/nextcloud/
# Nextcloudの格納ディレクトリに移動します。自分の環境に置き換えてください。

sudo -u www-data php ./occ
# NextcloudのCLIインタフェースです
エラー内容
An unhandled exception has been thrown:
OCP\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

memcacheとAPCuが読み込まれていないと怒られましたので、有効化していきます。

memcacheとAPCuの有効化

cd /etc/php/8.1/cli/conf.d
cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/10-opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/20-apcu.ini
[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
__EOF__
sudo systemctl restart apache2.service

再設定後の確認

cd /var/www/html/nextcloud/
# nextcloudの格納ディレクトリに移動します

sudo -u www-data php ./occ
# エラーが出ず、occのオプションが表示されることを確認しました。

この後、Nextcloudにアクセスし、画面が表示されることを確認しました。

管理者画面確認

Nextcloudに管理者アカウントでログインし、管理者設定を確認すると

  • PHPのメモリ制限が推奨値の512MB以下です。
  • テーマ別アプリは有効ですが、PHPモジュール「imagick」が有効ではありません。ファビコン生成を正しく行うには、このモジュールをインストールし、有効化する必要があります。
  • PHP モジュール "gmp" および "bcmath" が有効になっていない。WebAuthnパスワードレス認証を利用する場合は、これらのモジュールが必要です。

が出てきました。これを修正していきます。

php.ini修正

sudo cp -pi /etc/php/8.1/apache2/php.ini /etc/old/php.ini.$(date +%Y%m%d)
# /etc/oldがなければディレクトリを作成するか、任意のバックアップパスを指定してください

diff -u /etc/php/8.1/apache2/php.ini /etc/old/php.ini.$(date +%Y%m%d)
# 差分が存在しないことにより、バックアップが取れていることを確認します。

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.1/apache2/php.ini
# memory_limitを推奨値の512Mに置き換えます。
差分確認
diff -u  /etc/old/php.ini.$(date +%Y%m%d) /etc/php/8.1/apache2/php.ini
# 取得したバックアップと置き換えたファイルの差分を確認します
  • 差分
-memory_limit = 128M
+memory_limit = 512M

不足モジュールのインストール

sudo aptitude install php8.1-{imagick,gmp}

設定反映と確認

sudo systemctl restart apache2.service

Nextcloudに管理者アカウントでログインし、管理者設定を確認。

「すべてのチェックに合格しました」

と出たので設定完了です。

redmineのテーブルをタブ区切りで書くプラグイン導入。(redmine_tsv_macro)

これで、Redmineでの記事やチケットの作成作業が更に捗ります。

プラグイン概要

こういうエクセルファイルのテーブルをredmineのMarkdownに書き写す場合、TyporaやGrowiのテーブル機能を経由して変換する必要がありました。

これをほぼコピペだけで完結させるプラグインです。

参照URL

  • https://taikii.net/posts/2019/12/redmine-plugins-2019/
  • https://github.com/taikii/redmine_tsv_macro

手順

全て管理者権限で実施しています。

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

cd /var/lib/redmine/plugins
# 自分の環境に読み替えます

プラグインをインストールします。

sudo -u www-data git clone https://github.com/taikii/redmine_tsv_macro.git
# Webサービスを実行するユーザに合わせます(apache,nginxなど)

システムに反映させます。

systemctl restart apache2.service
# 自身の環境に合わせます

使い方

テーブルを作りたいところに{{tsv_h }}と入力し、その間にエクセルのブックをコピーしてペーストするだけです。

入力例

{{tsv_h
日付    曜日  天気  朝   朝:場所    昼   昼:場所    夜   夜:場所    備考
2023/1/1    日   晴れ  おせち 自宅  おせち 自宅  カレー 自宅  
2023/1/2    月   晴れ  明太釜玉うどん 自宅  クリームパスタ 自宅  餃子雑煮    自宅  
2023/1/3    火   晴れ  鳥オムレツ   自宅  ソーセージ定食 自宅  カツ丼 自宅  
2023/1/4    水   晴れ  ハンバーグ定食 自宅  春巻き弁当   自宅  雑煮  自宅  
2023/1/5    木   晴れ  ソーセージ定食 自宅  チャーシュー麺セット  ぎょうざの満洲 プラウンマサラ 自宅  
}}

出力結果

Excelのみならず、Googleスプレッドシート経由でも他のアプリを利用することなく、ブラウザ間のみでシートの貼り付けが可能になります。

また、{{tsv_h }}{{tsv }}とすることで、ヘッダを用いないテーブルが作成可能です。

注意点

  • ヘッダは空白行を作らないようにしてください。そうしないと全体のテーブルがずれます。
  • また、セルに改行があったり記号などでも崩れるようです。
  • 崩れないテーブルを作りたい場合は素直に他のツールを使います。

ボードゲーム『ジャイプル』ソロバリアント

ゲームセットアップ図

2人用ボードゲーム『ジャイプル』に以下のソロバリアントがあったのでご紹介です。

対人戦よりも

  • 確率計算
  • リスク予知ならびにリスク判断
  • 慎重な手札管理

が求められるシビアでタイトなバリアントとなっています。

参考:
https://thesoloboardgamer.com/jaipur-solo-variant/

ソロ概要

このソロバリアントではボットとしのぎを削り合います。ボットは定められたアクションに従った行動を取ります。

ボットの特徴

以下が通常と異なります。

  • ボットは手札を持ちません。
  • ボットは商品カードを獲得/交換しません。(代わりに市場にあるカードを捨てます)
  • ボットは家畜(ラクダ)を獲得しますが交換を行いません。
  • ラウンドが終了して得点計算時、ボットは「あなた(プレイヤー)がこのラウンドで獲得しなかった全ての商品トークン」を受け取り、それらをボットの得点に加えます。

ソロバリアント時のセットアップ準備

  1. 山札から全ての商品カード(レッドダイヤ/金/銀/絹/スパイス/革)と家畜カードを各1枚抜き出して裏向きでシャッフルします。これがボットのアクションデッキとなります。
  2. それ以外は通常のゲームと同じです。商品トークンを降順に並び替え、ボーナストークンを3/4/5に分けてランダムに裏向きで並び替え、威信トークンとラクダトークンを脇に置きます。
  3. 山札からラクダカード3枚を抜き出して市場に並べ、再度山札をシャッフルします。
  4. プレイヤーは5枚カードを引きます。この時、手札にラクダがいたらそれらを家畜置き場に置きます。
  5. 山札の上からカード2枚を公開し、市場に加えます。
  6. アクションデッキは裏向きのまま、他のカードと混ざらないよう、適当な位置に置きます。
  7. 第1ラウンドはプレイヤーの先攻で始まります。
ボットのアクションデッキ。商品各1枚と家畜(ラクダ)で構成されています。

ゲーム進行

プレイヤーのアクション

通常のゲームと全く同じです。

  1. 商品カード1枚を市場から獲得する
  2. 市場にある全ての家畜を引き取る
  3. 手札/家畜2枚以上と市場のカードを交換する
  4. 手札の商品1種類を売却してそれに応じた商品トークンを獲得する

上記いずれかを行ったら必要に応じて市場のカードが5枚になるように補充しボットに手番を渡します。

※通常のゲームと同じく手札7枚制限を忘れないようにしてください。

ボットのアクション

ボットの基本動作

  • 適当な位置に置いたアクションデッキを上から1枚めくって公開します。この時に出てきた商品に応じたアクションを行います。
  • アクションを行ったら、(市場にカードを補充して)プレイヤーに手番が移ります。
  • これ以降、ボットに手番が渡った場合、同じようにデッキの一番上のカードを公開してアクションを行っていきます。

基本1:公開した商品カードと同じものが市場に存在しない場合

  • 公開した商品のトークン1枚をボットに渡します。(通常と同じように、ストックにある一番高い価値のトークンです)

基本2:公開した商品カードと同じものが市場に存在する場合

  • 公開した商品と一致した市場のカード全てを捨て札にします。
  • ※ボットがこのアクションを実行した場合、ボットは商品トークンを獲得しません※
  • 捨てたカードが3/4/5枚の場合、これに相当するボーナストークンを裏向きのままボットに渡します。(ラウンド終了まで伏せておきます)

基本3:公開したカードが家畜(ラクダ)だった場合

  • 市場に家畜がある:それら全ての家畜をボットの家畜置き場に置きます。(これらのカードはラウンド終了時のボーナスで参照します)
  • 市場に家畜がない:後述する「ボットの好み」に合わせ、市場に存在する一番高い価値の「商品カード」1枚を捨て札にします。

ボットの例外動作

基本動作に沿わない動きが時々出てくるので、それらを明確化します。

例外1:ボットのアクションデッキが無くなった

ボットの手番終了時にボットのアクションデッキが尽きた場合は順番を並び替えずに裏向きにして次のアクションデッキとします。

例)
ボットは

革 → レッドダイヤ → 家畜 → 銀 → スパイス → 絹 → 金

の順番でカードを公開しました。次以降のアクションも同じく「革」から始まって「金」で終わるよう、裏向きにしてアクションデッキを作ります。

例外2: 公開した商品カードと同じものが市場に存在せず、その商品トークンがない場合

この場合、後述する「ボットの好み」に合わせ、市場に存在する一番高い価値の商品カードを捨て札にします。

例)
ボットは市場にないレッドダイヤを公開したが、レッドダイヤのトークンは尽きた。
市場は 銀 / 革 / スパイス / スパイス / ラクダ が並んでいる。ボットの好みが一番高いのは銀なので、これを捨て札にした。

ボットの好み

カードを破棄する場合の優先順位は次の通りです。

↑優先順位が高い↑

  1. レッドダイヤ
  2. スパイス
  3. 家畜

↓優先順位が低い↓

ラウンド終了と得点計算

ラウンド終了判定

通常のゲームと同じです。各手番終了時、

  1. 商品トークン3種が尽きた
  2. 山札が尽きた

のどちらかでラウンドは終了し得点計算に入ります。

得点計算

  • 得点計算前、ボットは「プレイヤーが獲得しなかった全ての商品トークン(ボーナストークンを除く)」を受け取ります。
  • 家畜置き場にある家畜を参照し、ボットの方が家畜の数が多い場合、ボットはそのボーナスも受け取ります。
  1. ラウンド中にボットが獲得したトークン(ボーナストークン含む)
  2. プレイヤーが獲得しなかった全ての商品トークン

を公開し、その合計点がボットの点数です。

プレイヤーの得点は通常のゲームと同じです。合計値が高い方がラウンドの勝者となり、威信トークンを受け取ります。

次ラウンドの準備とゲーム終了判定

  • ラウンドの勝者が次ラウンドの後攻です。
  • 同じようにチップを市場に並び替え、市場や手札を用意します。
  • ボットのアクションデッキは内容はそのままに裏向きにシャッフルします。
  • ラウンドを続け、先に2つの威信トークンを得た方がゲームの勝者です。

ボードゲーム『ジャイプル』感想。

ボードゲームカフェの方にインストいただき、購入しました。
運/戦略/リスク判断がマッチし、テンポの良さも心地よい2人用ボードゲームです。

概要

プレイヤーはインドの商人。手札や品数の残りなど、限られた資源をうまくやりくりして対戦相手よりも多くのお金を稼いでいきます。

  • 衣服/スパイス/貴金属といった商品を仕入れ
  • 商品を有利な条件で売りさばく

ことで資金(ルピー)を稼いでいきます。商品チップが3種類尽きたか山札が尽きればラウンド終了のトリガー。ラウンドごとに得られた資金(ルピー)を計算し、2本先取したプレイヤーがマハラジャ専属商人としての栄光を得ます。

良かったと思った点

言語依存のないコンポーネント

商品/家畜が書かれたカードと数字が記載された商品やボーナスチップのみ。そのため、簡単な計算ができる年齢から楽しめます。

先行売却とまとめ売りのジレンマ

  • (銀を除き)先に売却を行った者は多くの資金を得られる
  • まとめて売却した者には追加のボーナス

の2つがうまくマッチしているため、「先に売却したいけど、もう1枚/2枚あれば」のチキンレースを味わえます。しかも、商品の数は限られている上にラウンド終了のトリガーにも直結。

この、GoとStayを常に秤にかけながらのやりとりがとても白熱です。

「家畜(ラクダ)」の存在

本作の最大のキーアイテムです。売却を行えば行うほど減る手札。これを補うのが市場にある家畜(ラクダ)カードを引き取るアクション。
これは擬似的な手札として機能し、持っていればいるほど有利な商品仕入れにつながります。

しかし、このアクションを採用することは「市場によりよい品物があふれる可能性」を対戦相手に与えます。これが先の「先行売却/まとめ売り」システムと合致しています。

この、「今見えている商品を仕入れる/交換する」か「この次に相手に有利な選択肢を与えてでも後の取引につなげるか」のインタラクションはこのゲームの醍醐味でした。

難点だと思ったところ

見落としやすいルールあり

  1. カードを交換する場合は2枚以上(1枚だけの交換は不可)
  2. 高価な商品(銀/金/レッドダイヤモンド)は手札に2枚以上ないと売却できない
  3. 売却できる製品は1種類のみ
  4. 売却する商品のカード枚数>トークン枚数の状態でもまとめ売りボーナスは得られる

など、売却時に関する細かいルールを見逃しやすいので、インストの際には注意が必要です。

ラウンドごとのセットアップ

  • システムの都合上、ラウンドごとに全ての商品トークンを昇順に並べる必要があります。これが不慣れな状態だと面倒です。
  • 山札も切り直す必要がありますが、このときにシャッフルが甘いと商品をまとめ引きする可能性が非常に高いです。

まとめ

  • ほどほどの時間で終わる中箱寄りの小箱
  • 駆け引きも楽しめ
  • 運と戦略とリスク判断の悩みどころ満載

これもまた「古典/名作と呼ばれるには理由がある」と納得した一本でした。

カードとチップのみのシンプルなコンポーネントも初心者に優しく、運の要素があるために経験者が絶対有利にならないのが個人的な評価点。

余談ではありますが、サードパーティー製の商品アップグレードトークンがあります。

大型ボードゲームが(下手すれば格調込みで)買える値段のためおいそれとオススメはできませんが、『宝石の煌めき』と同じような質感で対戦ができるために本作が気に入った方はこちらへの差し替えを提案したいです。

袋、差し替え。(ボードゲーム『宝石の煌めき:デュエル』アップグレード

ぬくみ温泉開拓記に引き続き、こちらもアップグレードです。

左の備え付けから、右の巾着袋へとアップグレード。

裏地もしっかりしているので手触り、視認性抜群。

元の箱にもキチッと収まって

更に彩りと華やかさを加えてくれました。

ボードゲーム『ジャイプル』開封とアップグレード。

ボードゲームカフェで遊んだ中で特に印象が残った『ジャイプル』。

「ラクダ」を媒介とした取引が優秀。ルールも単純なのに熱い駆け引きが楽しめます。

また、2人用にありがちなアプストラクトでないのでライト層にも届く秀逸さも。

そこで、これは手元においておきたいと入手しました。

すでにチップは抜かれた状態であり、インサートにカードがしっかり収まります。

ではありますが、

このチップの視認性が微妙に良くないのが難点です。そこで、

専用のアップグレードトークンも一緒に購入です。

『宝石の煌めき』と同じようなズシッとした重量感。縁も種類ごとに塗られているために視認性も完璧。

専用インサートを抜けばもとの箱にも収まるのも好感触です。

本作の入手で、二人用のボードゲームの選択肢に幅が広がりました。

mod_securityが検知した不審なアクセスをufwで一括遮断。

あらまし

apacheにmod_securityを導入後、以下を実施しました。

  1. Mod_Securityが検知した不審なアクセスのうち、IPアドレスのみを抜き出す
  2. その抜き出したIPアドレスをMod_securityによってブロックする
  3. これを日次で追加していく

この方法はそこそこうまくいっています。ですが、「これら不審なアクセス元はWebだけでの攻撃だけか? メールやSSHへの攻撃もしているだろう」と思い立ち、不審なアクセスを元から絶つ方法を採りました。

環境

AWS Lightsailで以下を動かしています。

  • Ubuntu 20.04
  • いわゆるLAMP環境

前提

以下が準備済みです。

  • Mod_Security導入済み
  • 前述したmod_securityから不審なアクセス元のみを抜き出したIPアドレスのリストがある
    • このリストをnegativelist.txtとして用意しています。
リスト形式
192.168.0.1
192.168.1.123

のように、一行ずつIPアドレスだけが記述されているファイルです。

さっくりとした手順

  1. ufwを有効化します。
  2. 不審なアクセス元のIPアドレスのみを抜き出したnegativelist.txtを一行ずつ読み込みアクセスを遮断するシェルスクリプトを作成します。
  3. 作成したスクリプトを実行します。

実行の前の注意事項

  • 自環境のアクセスが遮断される可能性があることに注意してください。
  • 事前にスナップショットやバックアップを取り、失敗した時に備え切り戻しができる準備を強く推奨します
  • この方法によりアクセスができなくなった等に対し、筆者は責任を負いかねます。

手順

全て管理者権限で実施しています。

ufwがインストールされていることを確認します。(導入済みの場合はスキップ)

apt list ufw
#  [インストール済み] となっていることを確認します。

ufwを有効化します。(導入済みの場合はスキップ)

ufw enable

許可するサービスを指定します。(導入済みの場合はスキップ)

ufw limit ssh
# 連続したSSHアクセスを遮断します
ufw allow http
ufw allow https
# その他の許可するサービスは必要に応じて指定してください

この段階で、以下を確認します。

  • ターミナルクライアントからSSH接続ができること
  • 既存のサービスが外部NWからアクセスできること

サービス確認

ufw status
実行例
状態: アクティブ

To                         Action      From
--                         ------      ----
22                         LIMIT       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
22 (v6)                    LIMIT       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             

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

vi /hoge/add_ufw.sh
スクリプト内容
#!/bin/bash

# UFWを念のため事前に有効化します
ufw enable

# ファイルに書かれたIPアドレスを一行ずつ読み込みアクセスを遮断します。
while read line; do
    ufw deny from $line
# 読み込むファイルを指定します
done < /path/to/negativelist.txt

シェルスクリプトに実行権限を与えます。

chmod +x /hoge/add_ufw.sh

シェルスクリプトを実行します。

./hoge/add_ufw.sh
# 行数によっては相当な時間がかかります

実行後の確認を行います。

ufw status
実行例(抜粋)
Anywhere                   DENY        192.168.0.1              
Anywhere                   DENY        192.168.1.111              

まとめ

これで、「Webサイトに対して不審なアクセスを行ったIPをまるごと遮断する」ことが可能になりました。相当乱暴な方法ではあることにご注意ください。

exitの恐怖。(systemctlの罠)

かなりのヒヤリハットが起きました。

現象:突然のアクセス不可

AWS Lightsailで動かしているUbuntu。その設定変更を終えたときです。

突然、SSH接続が切れました。Webブラウザ上からも接続できず。これは一体と思いながらAWSコンソールを確認するとインスタンスは停止状態。

取り急ぎ、再度起動してログインできることを確認し、「なぜ、こうなってしまったのか」を確認します。

原因と思われるコマンド

さっそく、historyを追ってみます。その中に

systemctl exit

と入力していたことがわかりました。

  • 一度、systemctlでサービスの状態を確かめようとする
  • でも、普通に起動していたことは確認できていた。
  • Ctrl + Cでコマンドをキャンセルするのを忘れ
  • そのままログアウト感覚で「exit」を入力

が、このコマンドを発行した経緯だと推測。そこで、もう一つの仮説です。

systemctl exitのコマンド結果

「このコマンドを発行することでシャットダウンとなるのではないか」と推測し、物理環境のUbuntu 20系Linuxで試してみました。

systemctl exit

結果、ものの見事にシャットオフ。Webの記事などで乗っていない挙動だっただけに焦りましたけど、文脈としては腑に落ちます。

今後、systemctl系を触るときはもっと注意が必要だと改めて悟りました。

Ubuntu 22.04系にRuby2.7をインストール

結論から言えば、Ubuntu 22.04系は普通にやったのではRuby 2.7はインストールできません。

なぜならRuby 2.7が必要とするOpenssl1.1.1系をUbuntu 22.04系がサポートしていないからです。

そんな中で、どうしてもこのバージョンを入れたいというケースがあったので対応を行いました。

手順

参考
https://github.com/rbenv/ruby-build/discussions/1940#discussioncomment-2663209

依存関係をインストールします。

sudo apt install git build-essential checkinstall zlib1g-dev

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

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
rbenvのパスを通します。
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

source ~/.bashrc

ruby-buildをインストールします。

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

OpenSSL 1.1.1をインストールします。

cd ~/Downloads
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
tar xf openssl-1.1.1q.tar.gz

cd ~/Downloads/openssl-1.1.1q
./config --prefix=/opt/openssl-1.1.1q --openssldir=/opt/openssl-1.1.1q shared zlib
make
make test
sudo make install

シンボリックリンクを張り替えます。

sudo rm -rf /opt/openssl-1.1.1q/certs
sudo ln -s /etc/ssl/certs /opt/openssl-1.1.1q

ruby 2.7系をインストールします。

RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/openssl-1.1.1q
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/openssl-1.1.1q rbenv install 2.7.6

rbenv global 2.7.6

インストールされていることを確認します。

ruby -v
ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux]

rootが参照できるようにパスを通します。

which ruby
# /home/user1/.rbenv/shims
# 結果を控えておきます
sudo su -

# ↓以下、rootでの作業↓
echo "export PATH=$PATH:/home/user1/.rbenv/shims" >> ~/.bashrc
source ~/.bashrc
which ruby
# /home/user1/.rbenv/shims
# 控えておいたパスであることを確認します
ruby -v
# ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux]
# 2.7系であることを確認します

と、ここまで書きましたがきっとDockerなどのコンテナを使ったほうが楽かと思います。

Page 2 of 4

Powered by WordPress & Theme by Anders Norén