ZipコマンドをGitBashで使えるようにする方法

PowerShellにて便利なWindows用のパッケージツール「Scoop」をインストールする。
PS> Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

エラーが発生した場合は、下記にて実行ポリシーを許可する。
PS> Set-ExecutionPolicy RemoteSigned -scope CurrentUser

再度、試みる
PS> Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

Zipコマンドのインストール。
PS> scoop install zip

GitBash(コマンドプロンプト)にてZipコマンドが使えるようになる!
cmd> zip -r xxxxx.zip hogehoge -x '*.mp4'

ちなみに、Zipコマンド以外にも様々なパッケージ、例えばFireFoxなどもインストール出来るようです。これは便利!

scoop search firefox などでインストールしたいパッケージ検索可能とのこと。
パッケージが見つからない場合は、scoop bucket add extras にてextrasバケットを追加すると、インストールできるパッケージが一気に増えるとのこと




FreeNASで古いHDDをWipeする

FreeNASで古いHDDを再利用する際、以前にRAID等で利用してたHDDを使用した場合、クイックWipeしてもReplace が成功しないことがある。

この場合、HDDを接続したら、最初に下記のddコマンドで、パーティション情報を保持しているセクタをサクッと初期化することで、WipeやReplaceに失敗せず利用可能となる。

sysctl kern.geom.debugflags=0x10

dd if=/dev/zero of=/dev/ada1 bs=512 count=1
ada1 の部分を、ターゲットのHDDに変更する。間違えると大変なのでタイプミスに要注意。

Cybozu2ical(Cybozu Office10からスケジュール抽出)

Cybozu Office からスケジュールデータをスクレイピングして、ical形式でレスポンスするスクリプトです。

元は名古屋の社長様が作られたもので、その後、望遠鏡ドットコム様が修正したものを勝手にメンテしたものとなります。

CoreOS で docker-compose を自動起動

CoreOSはもうサポート切れとなり、Fedora系に引き継がれているが我が家ではLAN内で使用している為、まだまだ現役である。

今回、サーバーをRebootしてもすぐに起動してくるよう、設定した際のメモを残す。





自動起動ファイル作成

$ sudo vi /etc/systemd/system/docker1.service
[Unit]
  Description=My Service
  After=docker.service
  Requires=docker.service
[Service]
  WorkingDirectory=/opt/app/laradock
  ExecStart=/opt/bin/docker-compose up -d
[Install]
  WantedBy=multi-user.target
 
$ sudo systemctl enable docker1
ln -s '/etc/systemd/system/docker1.service' '/etc/systemd/system/multi-user.target.wants/docker1.service'

一覧確認

ls -l /etc/systemd/system/multi-user.target.wants/docker*

最後に、Rebootして docker-compose ps で全てUPしていることを確認した。

WindowsのVisualStudioCode で PHP CS Fixer 拡張を使用する

WindowsのVisualStudioCode で PHP CS Fixer 拡張を使用する場合、
php.exeが必要みたいです。

このようなエラーに悩まされました。
PHP CS Fixer: executablePath not found, please check your settings. It will set to built-in php-cs-fixer.phar. Try again!

さて、下記が対処方法となります。
・ PHP CS Fixer 拡張をVisualStudioCode 上でインストール
・Windows版のPHPを下記よりダウンロードし
 https://windows.php.net/download/
 適当なパス 、例えば C:\php\ にZipの中身を設置します。
・さらに settings.json にパスを設定します。
 C:\Users\[ユーザ名]\AppData\Roaming\Code\User\settings.json に
    “php.validate.executablePath”: “C:\\php\\php.exe”,
 を追加します。
これで動作するようになります。

Pritunl VPN環境の構築手順

コロナの影響でリモート接続が必要となり構築した際のメモ。
既存のセグメントに透過的にアクセス可能とするのではなく、新しい仮想のVPNセグメントを生成して、そのセグメントに必要なクライアントを参加させる形となる。

Pritunlサーバ構築

AWS(準備)

  • EC2のOS: Amazon Linux 2
  • EC2インスタンスタイプ: t3.micro
  • ストレージ: 8GB
  • ElasticIP付与: 必須(以降、111.111.111.111)
  • ドメイン設定: 任意
  • インバウンドポート設定
    • TCP SSH、HTTP、HTTPS 保守作業する場所(自宅/会社)のIPのみ許可
    • UDP 18055 VPNクライアント用(*後ほどPritunlのWeb設定画面で表示される番号)

AWS(EC2サーバ構築)

  • SSHにて、ec2-userでログイン
  • ここを参考にPritunlをインストール(以下)

sudo tee /etc/yum.repos.d/mongodb-org-4.2.repo << EOF
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
EOF

sudo tee /etc/yum.repos.d/pritunl.repo << EOF
[pritunl]
name=Pritunl Repository
baseurl=https://repo.pritunl.com/stable/yum/amazonlinux/2/
gpgcheck=1
enabled=1
EOF

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
gpg –keyserver hkp://keyserver.ubuntu.com –recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A
gpg –armor –export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; sudo rpm –import key.tmp; rm -f key.tmp
sudo yum -y install pritunl mongodb-org
sudo systemctl start mongod pritunl
sudo systemctl enable mongod pritunl

  • セットアップキーを作成

sudo pritunl setup-key
0602d77d26fe4b22a8330a8c13c00000 のようなキーが表示される

  • デフォルトパスワードを作成

sudo pritunl default-password
Administrator default password:
username: “pritunl”
password: “xxxxxxxxxxxxxx”

Pritunl コントロール画面(初期設定)

  • ブラウザで、Pritunlセットアップ画面を開き、セットアップキーを入力する。
    https://111.111.111.111/setup
  • 先程生成した、ユーザ、初期パスワードを入力しログインする。
  • Settingsダイアログが表示されるのでNew Password、Lets Encrypt Domain(ドメイン取得時のみ)などを設定する。
  • オーガナイゼーション作成
    • 上部メニューの Users をクリック
    • Add Organization ボタンをクリック
      ※最低この単位で、VPNのネットワークセグメントを分けることも可能
  • ユーザ作成
    • Add User ボタンをクリック
    • 対象ユーザを全員分作成
    • Linuxのファイルサーバをクライアントにする場合、Pinやメールは設定しない
アカウント(半角) メール PIN(整数6文字以上)
user1 user1@hoge.jp 123456
user2 user1@hoge.jp 123456
user3 user3@hoge.jp 123456
linuxFileServer なし なし
  • サーバ作成
    Name: vpnの名称
    UDP: 18055 (自動で設定される)
    セグメント: 192.168.217.0/24 (自動で設定される)
    ※VPNセグメントを複数構築したい場合(ネットワークを分離したい場合)は複数作成する。
  • オーガナイゼーションをサーバに紐付ける
    • Attach Organization ボタンをクリック
    • オーガナイゼーションとサーバを入力
  • サーバの起動
    • 左側の Start Server 緑ボタンをクリック
    • 右側の Status が Online となればOK
  • 各ユーザのプロファイルをダウンロード
    ダウンロードしたプロファイルと、先程設定したPinを、各ユーザに配布する。

    このファイルとPinがあれば誰でも接続できてしまう為、配布は可能な限り安全な方法で行うこと。またPinは口頭で伝えるなどすること。

Windowsクライアントアプリの導入

  • ここより Pritunl.exe をダウンロードし、インストール
  • クライアント起動
  • 設定ファイルをImport(予め、Pritunlのユーザ一覧画面の右側のダウンロードボタンで、各ユーザの.tarファイルをダンロードしておく)
  • 右上のハンバーガーメニューより「Connect」
  • Pinをいれれば接続完了

リモートデスクトップを使用する場合は、接続元・先の2台にクライアントアプリをインストールします。
また、既存のファイルサーバにアクセスしたい場合は、ファイルサーバにクライアントをインストールします(次章を参照)

LinuxサーバにOpenVPNクライアントを導入

ファイルサーバ等、Linuxマシンにアクセスを行う必要がある場合などに必要となる。
ここの記事のclient側についてのみ参考にさせていただきました。

  • openvpnクライアントをインストール

yum install epel-release
yum install –enablerepo=epel openvpn

  • client.confの修正

cat /usr/share/doc/openvpn/sample/sample-config-files/client.conf > /etc/openvpn/client.conf
vi /etc/openvpn/client.conf

下記項目を変更します。
remote 111.111.111.111 18055
ca /etc/openvpn/ca
cert /etc/openvpn/cert
key /etc/openvpn/key
tls-auth /etc/openvpn/ta 1

  • 上記の4つの証明書(ca,cert,key,ta)に対応したファイルを作成
    Pritunlのユーザ一覧画面からダウンロードしたプロファイル(tarファイル)をLhaForge等のアーカイバで展開し、展開された .ovpnファイルを、サクラエディタ等のテキストエディタで開いて切り出し、ファイル化します。

<ca>~この部分をコピーして単独のファイル ca にする~</ca>

<tls-auth>~この部分をコピーして単独のファイル ta にする~</tls-auth>

<cert>~この部分をコピーして単独のファイル certに する~</cert>

<key>~この部分をコピーして単独のファイル key にする~</key>

※Linuxであれば tar -xf user1.tar のようにアーカイブを展開し、展開後のovpnファイルを vi user1.ovpn 等としてファイル内のタグで囲まれたテキスト部分を切り出してファイル化します。少々面倒なのですが、もっと良い方法を知っている方がいれば教えてほしいです・・・

  • VPNクライアント接続テスト

openvpn /etc/openvpn/client.conf

接続ログが画面にずらずらと表示される。エラーなどがなければOK。
※以下のようなPinエラーになる場合は、当該ユーザ作成時にPinを設定している為、Pinの設定を削除してください。

Mon Mar 30 02:03:30 2020 AUTH: Received control message:
AUTH_FAILED,CRV1:R:f52cbb8978cc402da249d2e00000003:bmls:Enter Pin
Mon Mar 30 02:03:30 2020 SIGTERM[soft,auth-failure] received, process exiting

  • VPNクライアント自動起動

vi /opt/openvpn-client.sh

#!/bin/bash  
openvpn /etc/openvpn/client.conf  

chmod 755 /opt/openvpn-client.sh
vi /etc/systemd/system/openvpn-client.service

[Unit]  
Description = OpenVPN-Client daemon  
[Service]  
ExecStart = /opt/openvpn-client.sh  
Restart = always  
Type = simple  
[Install]  
WantedBy=multi-user.target  
  • 起動

systemctl start openvpn-client
ps aux | grep openvpn

下記のようなプロセスがあれば問題ない
root 862 0.0 0.1 23284 3420 ? Ss 3月31 0:00 /bin/bash /opt/openvpn-client.sh
root 867 0.0 0.4 56504 7976 ? S 3月31 0:05 openvpn /etc/openvpn/client.conf

  • 自動起動

systemctl enable openvpn-client

  • サーバを再起動後しばらくして、Pritunl ユーザ一覧画面で、当該サーバが接続状態となっていればOK

ヒアドキュメント

「ヒアドキュメント」という言葉がいつも出てこなくなるので、メモ。

大体、いつもやりたくなるのは、下記のようにシェルで変数にぶち込みたくなるパタンが多い。
HOGE=$(cat << EOS
hoge
fuga
EOS
)

もしくは

HOGE=`cat << EOS
hoge
fuga
EOS
`

RancherOS上に作ったLaradock環境にLaravel-Adminをインストールメモ

  • ComposerでLaravel-Adminをインストール

    laradockディレクトリに移動して
    ./docker-compose exec workspace bash
    composer require encore/laravel-admin
    php artisan vendor:publish –provider=”Encore\Admin\AdminServiceProvider”
    php artisan admin:install

  • php artisan admin:installで、下記エラーが出たので調査

    Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused

  • MySQLの接続情報(.env)を修正(https://nobuhiroharada.com/2018/07/21/laravel-laradock-mysql-refused/)

    DB_HOST=127.0.0.1

    DB_HOST=mysql

  • 下記エラーが出たので調査

    Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

  • MySQLの認証方式の変更(https://qiita.com/shunichi_com/items/9b09c5949233b88b9a4a)

    ./docker-compose exec mysql bash
    # mysql -u root -p
    パスワード:root
    mysql> SELECT user, host, plugin FROM mysql.user;
    認証方式をcaching_sha2_passwordからmysql_native_passwordに変更
    mysql> ALTER USER ‘default’@’%’ IDENTIFIED WITH mysql_native_password BY ‘secret’;
    mysql> \q
    # exit
    sudo vi mysql/my.cnf
    [mysqld]内に下記を追加
    default_authentication_plugin= mysql_native_password

  • 再度、php artisan admin:installを実行

    php artisan admin:install

    Nothing to migrate.
    Database seeding completed successfully.
    Admin directory was created: /app/Admin
    HomeController file was created: /app/Admin/Controllers/HomeController.php
    AuthController file was created: /app/Admin/Controllers/AuthController.php
    ExampleController file was created: /app/Admin/Controllers/ExampleController.php
    Bootstrap file was created: /app/Admin/bootstrap.php
    Routes file was created: /app/Admin/routes.php

  • こうなればOK。
  • さらにLaravel-Adminの動作確認。下記を開いて、admin/adminでログインできればOK。

    http://192.168.23.3/admin/auth/login

  • 以上

Dockerホスト用軽量OS RancherOSでLaraDock環境構築

 

自宅鯖でDocker環境を構築する上で、CPUやメモリなどのリソースを限りなく節約する為に軽量ホストRancherOSを試してみました。

で、LaraDockが動くところまでをメモ。

  • VirtualBox起動
  • 新規仮想PCを下記で作成
    ・タイプ:Linux
    ・OS:Other Linux 64bit
    ・メモリ:4GB
    ・新規ディスク:8GB
    ・アダプター1:NAT、アダプター2:HostOnlyアダプタ(事前にVirtualBoxのグローバルツールで仮想アダプタを有効にしておく必要あり)
  • 下記にてダウンロードした、ブート可能なranchar.isoを光学ドライブとしてマウント
    https://releases.rancher.com/os/latest/rancheros.iso
  • 起動後、牛のアスキーアートが表示される。
  • パスワード設定
    sudo passwd rancher
  • TeraTerm等のターミナルソフトでSSH接続
  • RancherOSをHDDにインストール
    echo 'hostname: myrancher' > cloud-config.yml
    sudo ros os list

     にて最新のバージョンを確認し下記でインストール

    sudo ros install -i rancher/os:v1.5.0 -c cloud-config.yml -d /dev/sda --append 'rancher.password=mypass123'
  • インストールが終わるとrebootされる。
  • ranchar.isoを光学ドライブから除去し、isoからブートしないようにHDDからブートする。
  • 再度、TeraTerm等のターミナルソフトでSSH接続
  • DockerComposeをインストール
    sudo wget https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m`
    sudo mv docker-compose-Linux-x86_64 docker-compose
    sudo chmod +x docker-compose
  • gitコマンドをインストール
    alias git="docker run -ti --rm -v $(pwd):/git bwits/docker-git-alpine"
  • 開発用ディレクトリの準備
    git clone https://github.com/LaraDock/laradock.git
    cd laradock
    sudo cp env-example .env
    vi .env
    APP_CODE_PATH_HOST=../hoge_proj/
  • Laradockコンテナ群をUp(20~30分位かかる)
    sudo ./docker-compose up -d nginx mysql redis
  • コンテナが動いているか確認
    docker-compose ps

    Name Command State Ports
    —————————————————————————————————————
    laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
    laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
    laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
    laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
    laradock_redis_1 docker-entrypoint.sh redis … Up 0.0.0.0:6379->6379/tcp
    laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp

  • Laravelプロジェクトのインストール(10分位かかる)
    ./docker-compose exec workspace bash
    composer create-project laravel/laravel ./hoge_proj --prefer-dist
    chmod -R 777 storage/
  • ホストOSのIP(HostOnlyアダプタ側)をブラウザで開き、Laravelと表示されれば完了!
  • コンテナをリビルドするには
    sudo docker-compose up --build -d nginx mysql redis

XigmaNASでautoexpandをONにする

FreeNASよりもメモリ消費が少なく、GUIが使いやすいXigmaNasで、Autoexpand(HDD交換時にPool容量を自動で拡張するオプション)をOnにする方法。

  • SSHで接続する(事前にサービス画面でチェックボックスにチェックし、SSHを有効化)
  • 下記コマンドを実行

# zpool set autoexpand=on fileserver

  • 下記コマンドで有効になっていればOK

# zpool get autoexpand fileserver

ちなみに、GUIツールのコマンド実行でも上記コマンドを実行は可能。