WPP
Linux Mint のスワップファイルを大きくする

今朝、Linux のノートPCをレジュームで起動するとどうやらスワップファイルがパンパンになっているようでほとんど操作ができない状態に陥った。free -h すると 2GB のスワップファイルを使い切っていてどうにも処理が進まない様子だ。

なので、スワップファイルを大きくすることにした。

; もともとあるスワップファイルが swapfile という名前だったので適当に変えた
$ sudo fallocate -l 4G /swapspace

$ sudo chmod 600 /swapspace
$ sudo mkswap /swapspace
$ sudo swapon /swapspace

$ sudo swapoff -v /swapfile

このままだと再起動するとスワップを認識しなくなるので、/etc/fstab に追記する

/swapspace  none  swap  defaults  0  0

これでしばらく様子をみることにしよう。

参考

Linux Mint 21にスワップスペースを追加する方法

スワップ – ArchWiki

CakePHP で .env を使う方法

CakePHP では .env に設定値を逃して env() で読み込むことができると Cookbook: 構成設定 – 5.x に説明されている。だがしかし、説明のとおり.env.example を.env にコピーしても反映されない。(Cookbook は、.env.default となっているが実際のファイルは、.env.examlpe となっている。んー。)

検索すると Qiita にそれっぽいのがあったのでやってみるとビンゴだった。

bootstrap.php の中で .env をロードする処理がコメントアウトされているためだった。

/*
 * See https://github.com/josegonzalez/php-dotenv for API details.
 *
 * Uncomment block of code below if you want to use `.env` file during development.
 * You should copy `config/.env.example` to `config/.env` and set/modify the
 * variables as required.
 *
 * The purpose of the .env file is to emulate the presence of the environment
 * variables like they would be present in production.
 *
 * If you use .env files, be careful to not commit them to source control to avoid
 * security risks. See https://github.com/josegonzalez/php-dotenv#general-security-information
 * for more information for recommended practices.
*/
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
    $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
    $dotenv->parse()
        ->putenv()
        ->toEnv()
        ->toServer();
}

今回、.env ファイルに DB 周りの設定を逃してみた。

こんな感じでホスト名やDB関連のパラメータを設定すると

export DB_HOST="maria"
export DB_ROOT="root"
export DB_ROOT_PASS="DBPASSWORD!"
export DB_NAME="CAKE_DATABASE"
export DB_USER="user"
export DB_PASS="PASSWORD"

app_local.php で env() で読み込む

return[
// 一部抜粋

  'Datasources' => [
        'default' => [
            'host' => env('DB_HOST', null),
            'username' => env('DB_USER', null),
            'password' => env('DB_PASS', null),
            'database' => env('DB_NAME', null),
            //'schema' => 'myapp',
        ],

// 抜粋終わり

CakePHP のドキュメントは割とわかりやすいので嫌いではないが、app_local.php や .env 周辺の説明は相変わらずファイル名の間違いや記述の不足があってわかりにくい。

このへんなんとかならないかな。

参考

CakePHP3で.envファイルを有効化する #PHP – Qiita

docker 内のcakephp ローカルサーバにアクセスできない時

超小ネタ。docker 内に cakephp 5 を入れてとりあえず面倒なので、Webサーバなしで軽く試そうと思い cake のローカルサーバを起動するも外部からアクセスできない現象に遭遇した。

もちろん docker -p や docker-compose.yml ports は正しく構成しています。

答えは、コンテナ内でローカルサーバを起動した画面にすでにありました。

; app に cakephp5 をインスールしています。ご自分の環境に読み替えてください。
# app/bin/cake  server 

Welcome to CakePHP v5.0.6 Console
-------------------------------------------------------------------------------
App : src
Path: /var/www/app/src/
DocumentRoot: /var/www/app/webroot
Ini Path: 
-------------------------------------------------------------------------------
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`
[Sun Mar 24 10:27:49 2024] PHP 8.3.3 Development Server (http://localhost:8765) started

cake server が localhost にバインドしているので、外からはアクセスできない状態ってことを暗に示しています。

これを動作するようにするには、0.0.0.0 にバインドします。お好みで -p でポートを変更してもいい。

# app/bin/cake server -H 0.0.0.0 

考えてみれば当たり前のことで、 Docker はホストとは別のネットワークを生成します。この時、コンテナ内の localhost へアクセスできません。 0.0.0.0 にバインドするってことは、コンテナにあるすべての NIC で待受することになるので、アクセスできるようになったってことだと思われる。

Android Studio 2023.2.1の “Gradle JDK” から重複項目を削除

Android Studio で Gradle の JDK をダウンロードすると、複数同じ項目が表示されることがある。それを削除する方法です。

参考のくまねこさん記事の内容をやりたいのだが、かの記事は Mac の場合のパス名になっています。自分は今開発機にしているのが Linux Mint なのでパスが異なるのでそれを調べた。要は jdk.table.xml はどこにあるかってことです。

その Gradle の設定画面は、以下の操作で開いた画面のことです。

  1. File メニュー > Settings を選び Settings ダイアログを表示します。
  2. Build, Execution, Deployment > Build Tools > Gradle と左のツリービューをたどり
  3. Gradle JDK: ドロップダウンリスト

ここのことです。

[ここに画像をいれること]

Download JDK でもともと存在する JDK と同じものを指定するとホームディレクトリにダウンロードして名前に (2) とか付加される仕組みのようです。

で、 jdk.table.xml ファイルってどこにあんのよ? って話ですが、ヒントは Android Developer のページにありました。

Troubleshoot Android Studio  |  Android Developers このページによると設定ファイルはホームディレクトリの.config 以下にあるようです。

探してみると /home/mnishi/.config/Google/AndroidStudio2023.2/options フォルダに jdk.table.xml はありました。

見つかった XML ファイルを慎重に編集して Android Studio を再起動すると反映されます。

XML なのでカッコの対応崩れるときっとろくでもないことがおきます。きちんとバックアップとってからいじりましょう。

にしても、Android Studio の環境構築は繊細でやっぱり好きになれない。

参考

Android StudioでGradle JDKのバージョン一覧の整理 – Zenn くまねこさん

Troubleshoot Android Studio  |  Android Developers

WordPress テーマ DecorMe のリストを少し修正

この WP サイトでは Burger Themes というサイトの DecorMe の無料版を使っていますが、番号付きリストに変な黄色い■形が表示されていることに気づきました。

ブラウザでインスペクトしてみると ■形は li の :before で表示しているようです。 ul も ol も 指定がないので両方の箇条書き要素にあたってしまっているようです。実際の CSS はこうなっていました。

.post-items li:before {
    content: "";
    width: 5px;
    height: 5px;
    background-color: var(--bs-primary);
    margin-right: 18px;
    display: inline-block;
    vertical-align: 3px;
    outline: 2px solid rgba(255, 255, 255, 0.2);
    outline-offset: 4px;
}

これの content 属性で文字の装飾として■形が表示されているようです。

li の前に ul を入れて番号なし箇条書きの時のみに当たるようにしてみます。さらに ol の時は表示しないようにします。

WordPress の管理画面で[外観] >[カスタマイズ] と進み、 [追加CSS] の画面で以下を投入します。

これだけで OK かと思いましたが、 ul が左へはみ出すので padding-left も追加します。

.post-items ul li:before {
    content: "";
    width: 5px;
    height: 5px;
    background-color: var(--bs-primary);
    margin-right: 18px;
    display: inline-block;
    vertical-align: 3px;
    outline: 2px solid rgba(255, 255, 255, 0.2);
    outline-offset: 4px;
}

.post-items ol li:before {
    content: initial;
}

/* ul に左padding 指定 */
.post-items ul {
	padding-left: 1rem;
}

これでよさそう。

pipenv の仮想環境をカレントに作る

よくあるネタですが、自分が探しやすいようにメモります。

ここのところ python の仮想環境は pipenv に落ち着いているのですが (venv 使っていた頃より余計な作業が減った気がする)、賛否両論ありますがカレントのプロジェクトフォルダにつくる方法です。

# 一時的に環境変数を経由
$ export PIPENV_VENV_IN_PROJECT=1
$ pipenv shell

# .env 設定ファイルを介して行う方法
$ echo ""PIPENV_VENV_IN_PROJECT=1" >> .env
$ pipenv shell

いちいち忘れるので .env の雛形ファイルを作って雛形フォルダに置いておいた。

これで大丈夫だろう

古いカーネルとカーネルモジュールをアンインストールする

ふと気がつくと /usr/lib/modules の容量が数 GB になっていたりするので、不要なカーネルとモジュールを削除する方法を調べた。

きっとすぐに忘れるだろうからメモしておく。

# インストール済みの カーネル関係のパッケージを確認する
$ dpkg --get-selections |grep -i linu
binutils-x86-64-linux-gnu								install
console-setup-linux											install
libnvpair3linux													install
libselinux1:amd64											install
libselinux1:i386												install
libuutil3linux														install
libzfs4linux														install
libzpool5linux													install
linux-base															install
linux-firmware													install
linux-generic														install
linux-headers-5.15.0-97									install
linux-headers-5.15.0-100								install
linux-headers-5.15.0-100-generic					install
linux-headers-generic										install
linux-image-5.15.0-100-generic					install
linux-image-generic											install
linux-libc-dev:amd64										install
linux-modules-5.15.0-100-generic				install
linux-modules-extra-5.15.0-100-generic		install
linux-sound-base												install
linuxmint-keyring												install
pptp-linux															install
syslinux																install
syslinux-common												install
syslinux-utils														install
util-linux															install
zfsutils-linux														install


# こんな感じで不要なパッケージを削除
$ sudo apt  purge -y linix-headers-5.15.0-97

要するにカーネル関連のパッケージはアンインストールされても残るっぽいので purge で残ったファイルを削除する必要があるらしい。

VS Code 1.8.7 でターミナルのクリアにキーをアサインをする

この設定は完全に個人の好みだが、作業中のターミナルに履歴があるのが好きではない。作業ログという意味で消さない派が存在することもわかるのですが、明らかに見返すことがないものがたくさんあると探すのが面倒と感じてしまう。

今回の環境は Linux Mint なので他の OS では異なるのかもしれないが、ターミナルをクリアする機能にキーアサインされていないので、割り当てることにする。

以前のバージョンの VS Code には、keybindings.json という設定ファイルが あったっぽいが、Ver. 1.8.7 にはなさそうでその代わり Keyboard Shortcuts っていう UI ができたようだ。VS Code の設定画面周りは割と頻繁に変更されているのでその一環なんだと思う。

手順

  1. CTRL + SHIFT + P (コマンドパレットに > が入っている状態)
  2. Preferences: Open Keyboard Shortcuts
  3. terminal clear と入力して検索する
  4. 好きなキーを割り当てる

今回は、CTRL + Super (Windows キー) + L を割り当てたがまあ好きにしたらいいと思う。

他の機能のキーアサインの変更も同様にできる。

Linux Mint に LM Studio をインストール

ちょっと気になっている LM Studio をインストールしてみた。Win や Mac の場合はダウンロードしてそのまま動くっぽいが、Linux Mint ではだめだった。おそらく他の Ubuntu 系でも同様の現象が起きると思われる。

条件

LM_Studio-0.2.14-beta-1.AppImage

Linux Mint 21.3 (Virginia)

現象

おもむろにダウンロードして実行すると以下のエラーがでる。(AppImage はそのままだと動かないので chmod 755 するのを忘れずに。)

$ ./LM_Studio-.02.14-beta-1.AppImage 
18:32:45.958 › GPU info: '00:02.0 VGA compatible controller: Intel Corporation Skylake GT2 [HD Graphics 520] (rev 07)'
18:32:45.974 › Got GPU Type: intel
18:32:45.974 › LM Studio: gpu type = Intel
A JavaScript error occurred in the main process
Uncaught Exception:
Error: /usr/local/lib/libclblast.so.1: cannot open shared object file: No such file or directory
    at process.func [as dlopen] (node:electron/js2c/asar_bundle:2:1822)
    at Module._extensions..node (node:internal/modules/cjs/loader:1326:18)
    at Object.func [as .node] (node:electron/js2c/asar_bundle:2:1822)
    at Module.load (node:internal/modules/cjs/loader:1096:32)
    at Module._load (node:internal/modules/cjs/loader:937:12)
    at f._load (node:electron/js2c/asar_bundle:2:13330)
    at Module.require (node:internal/modules/cjs/loader:1120:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at 6829 (/tmp/.mount_LM_StuFaD1Or/resources/app/.webpack/main/index.js:2:2058)
    at r (/tmp/.mount_LM_StuFaD1Or/resources/app/.webpack/main/index.js:8:401969)
^Cfym@VJS111:/opt/dl$ ^C

ようは、libclblast がない (見つからない) らしい。.

なのでインストールする

$ sudo apt install -y libclblast1

でも最初と同じエラーがでるので検索してみると、どうも AppImage は /usr/local/lib にライブラリを探しにいくらしいのでリンクを張れっていうのがヒットする

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libclblast.so.1.5.2 /usr/local/lib/libclblast.so 

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libclblast.so.1 /usr/local/lib/libclblast.so.1 

これで無事に起動するようになる。

参考

LM Studio – Discover, download, and run local LLMs

On KUbuntu 23.10, LM_Studio searches for the libclblast libraries in the wrong path ! · Issue #24 · lmstudio-ai/.github · GitHub

Linux Mint 21.3 Virginia の pipenv でエラー + Python バージョンを切り替えられるようにする

python の開発環境は pipenv を使っているのですが、Linux Mint の標準リポジトリに入っている pipenv だとエラーになって動かない。

入っている Python は 3.10 。ネットを検索してみると pipenv が古いとかなんとか。。。一旦消して pip でインストールし直すのがいいらしいのでやってみた。

$ sudo apt install pipenv-

# python3 しかはいっていないので pip3 とする必要はない pip で OK
$ pip install pipenv

これで解決。

ついでに Python バージョンを切り替えられるようにしておく。pyenv でもいいのですが、今回は update-alternatives にします。というのもこの辺のツールの移り変わり早いので廃れるとわりと放置されがち、ちょっと時間経つと面倒なことになる印象があります。

update-alternatives なら Ubuntu 系の OS では他のコマンド切り替えるためにも使われているっぽいのでだいじょぶそうじゃないかと。。。

# 末尾が優先度で多きい方が優先らしい
$ sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.10 110
$ sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.11 100

# リストが出てくるので [selection] の数字を選ぶと切り替わる
$ sudo update-alternatives --config python

参考

Ubuntu 22.04にPython3.xを複数インストールして切り替える方法(PPA・apt) #Python – Qiita