Git bashでリモートブランチをローカルにチェックアウトする(エイリアスで!)

基本のコマンド

誰かが新しく作ったブランチをローカルに取り込む時のコマンドは、基本的にはこれ。

git checkout -b {ブランチ名} {リモートブランチ}

でも、この場合のブランチ名って普通は「remotes/origin/XXX」の「XXX」をそのまま指定するよね。
アリスとかボブとかアップストリームとは無関係なブランチ名を使っている人がいたら上級者すぎる気がする。

エイリアス

そういうわけでエイリアスにします。

new = !"f(){ git checkout -b \"${@#remotes/origin/}\";};f"

この場合、使うときはこうなります。

git new remotes/origin/XXX



こちらを参考にさせていただきました。感謝。qiita.com

Postmanで連続でjsonをPUTする

Postmanの基本操作と、連続GETはこちらに書きました。
Postmanで変数で連続GETしてレスポンスをテストする - Dive into Numbers

さて、連続PUTです。
今回はbodyでボリューミーなjsonを連続してPUTに投げます。

コレクションにbodyを追加

bodyにも変数を追加できます。
rawデータの json タイプを選択してブレースで変数を書く。

f:id:hiro-29:20220331223229p:plain

キャプチャではURLの方には変数を書いてませんが、そっちにも書けます。
呼び出し順序は細かくはどこかに書いてあると思いますが、URLとbodyだけであれば、URL->body の順序のようです。

コレクションを編集したら忘れずに保存します。

Runnerを起動

今回もCSVを使います。
他にもっとスマートなやり方があると思いますが、CSVが一番簡単かな。

f:id:hiro-29:20220331225846p:plain

CSVの場合は改行コードにお気をつけ。

行の改行はCRLF、データ内での改行はLFです。
CSVファイルをExcelで開けば、改行やダブルクォーテーションをあんまり気にせず編集できます。

実行

実行するコレクションを選択して、CSVを取り込んで実行。

f:id:hiro-29:20220331230434p:plain

Testを書いていないので、結果はこんな感じになります。

f:id:hiro-29:20220331230937p:plain

別コレクションに別CSVを読ませることとか、1回のRUNでできるのかな~。
Flowsを使っても色々できそう。
後日また色々触ってみようと思います。

Postmanで変数で連続GETしてレスポンスをテストする

PostmanでAPIを連続して投げます。

GETの基本

Workspaces > My Workspace > 「+」でタブを新規オープン

f:id:hiro-29:20220331201618p:plain


URLを入れて、Sendを押下すればOK。
KEYとVALUEはURLに直書きしてもいいし、Query Paramsに入力してもよい。

f:id:hiro-29:20220331201954p:plain

結果は画面下部の「Response」に表示されます。

保存しておく

ちなみに、このまま放置してもタブは残ってくれているのですが、一回きりということはほとんどないと思いますので「保存」しておきます。
保存ボタン、グレーだから忘れがち。

f:id:hiro-29:20220331202945p:plain

フォルダを作れば、こんな感じに左の作業カラムに表示できます。
勝手に「GET」「POST」等をカラーリングして表示してくれる。
f:id:hiro-29:20220331203334p:plain

URLの一部を書き換えて連続して実行

例えばこのキャプチャなら「id=10」などの部分を、11も12も一気に投げたい場合。
波括弧・ブレースと呼ばれる {{}} で囲います。

f:id:hiro-29:20220331203804p:plain

この状態で「保存」しておきます。
保存してないと次ができません。

Runnerを起動

場所が結構分かりにくいです。
画面右下のはしっこ、ここからいつでも起動できます。

f:id:hiro-29:20220331204342p:plain

フォルダ単位でこっちからもいけます。
フォルダタブを開いて「▶」マークを押す。

f:id:hiro-29:20220331204427p:plain

実行したいコレクションを追加

書いてある通り、Drag a collectionします。

f:id:hiro-29:20220331210449p:plain

こうやって表示されます。
ということは、チェックを外せばもちろん実行されませんし、別のコレクションを連続して実行することもできます。優秀!

f:id:hiro-29:20220331210618p:plain

CSVファイルを作成

たぶん一番簡単だと思われる、csvで取り込む方法でやります。
こういう感じで、ブレースで宣言してある変数をタイトル行にして処理したい数分、行として追加。

pagename,id,page
testpage,1,1
testpage,1,2
testpage2,1,1
testpage2,1,2

ファイルを取り込んで実行

Select File から作成したCSVを選択。

f:id:hiro-29:20220331205437p:plain

勝手に行数とファイルタイプが表示されます。

f:id:hiro-29:20220331205657p:plain

実行

実行すると、こういう感じで返ってきます。

f:id:hiro-29:20220331211114p:plain

これだけだとステータスは分かるけど、それぞれのレスポンスの中身が見れません。(見える方法あるのかな?わかんなかった)
「This request does not have any tests.」と書いてあるように、Runnerは基本的にはテストを書いて実行するもののようです。

コレクションにテストを書く

今回はレスポンスがjsonで返ってくる予定で、その中に「item: 」という文字列がちゃんと返ってきているかをテストします。
jsは苦手…。

pm.test("Item is there", function () {
    pm.expect(pm.response.text()).to.include("item\":\" ");
});

サンプルは本家がしっかり出してくれてます。
learning.postman.com


Testを書いたらちゃんと「保存」して、もう一度Runnerで実行します。

f:id:hiro-29:20220331213918p:plain

Passしました。

文末が句点(。)じゃない行の改行を置換する[sakuraエディタ]

PDF化された論文とかをテキストコピーして持って来たいとき、文中で改行が入っちゃうんですよね…。
すべての改行を置換してしまうとだいたい改行ナシになってしまうので、「句点(。)で終わる行の改行以外の改行を消したい」という意図の置換です。

否定の正規表現って難しいよねぇ。

(?<!。)\r\n


文末「$」でも該当はするのですが改行(\r\n)を置換対象にできないのでNGのようです。

NG集

[^。]\r\n → 句点と改行両方ひっかかってしまう
[^。\r\n]$ → 改行の手前の一文字がひっかかってしまう
(?<!。)$ → 「該当行マーク」は上手く拾っているように見えるんだけど何も置換してない

特定のドメインのときのみBASICをかける(.htaccess)

探しても意外とちゃんと動くサンプルがなかったので、結構苦労しました。

    Satisfy any

    SetEnvIf Host "test\.domein\.com$" test_host
    Order allow,deny
    Allow from all
    Deny from env=test_host

    AuthUserFile "/var/www/test/domein/.htpasswd"
    AuthName "Please enter ID and Password."
    AuthType Basic
    require valid-user
  1. 最初に「Satisfy any」して全開放しておいて、「SetEnvIf Host」で命名しておいてからDenyする
  2. Denyのときのみその下のBasicが呼ばれる

という手順になるようです。(BasicとDenyfromのブロックの順番は無関係)

Denyされる ≒ Basicが呼ばれる」ということをちゃんと理解していなかったので時間がかかりました。

「SetEnvIf」の内部は正規表現なのでお気をつけ。
(SetEnvせずにDeny from でホスト直書きしようとしたら確か上手くいかなかったので、ちゃんとSetEnvする必要があるっぽい?)

参考にさせていただいたのはこのあたり。
.htaccessっていつまで経っても謎なところがあるんだよねぇ。難しい。

htaccessを用いて、特定のホストのみBasic認証を行うようにする… - 人力検索はてな

.htaccess の使い方や書き方・設置方法/ Web Design Leaves

ESXi7.0にUSBを挿してデータストアにする

ノートパソコンにESXi7.0を入れて、USBをデータストア化した作業ログ。
コマンドの解釈等が間違ってたら教えて下さい。


公式はこちら。謎のブログ記事より公式を見て。
ESXiでのpartedUtilコマンドラインディスクパーティションユーティリティの使用(1036609)

SUBメモリを「exFAT」形式でフォーマット

作業PCで Windows+R >「diskmgmt.msc」(ディスクの管理)を起動。
もしくはエクスプローラから右クリックからフォーマットしてもいい。


とにかく「exFAT」を選ぶということと、「クイックフォーマット」を選ぶ。

ついでにexFATにする理由は、ESXiからはこの形式しか読み込めないから。
公式記事があったはずなんだけど…掘り返したら追記する。

ESXi7.0のGUIからSSHを許可する

f:id:hiro-29:20210705164739p:plain
キャプチャには映ってないけど「SSHの有効化」ってメニューが横に出てくるので、それをクリック。

TeraTermからSSHログイン

ESXi登録時に登録しているはずのIDとパスワードでログイン。
認証方式はキーボードインタラクティブ認証。
こういうのが出てきてくるのでもう一度打つ。
f:id:hiro-29:20210705165142p:plain


ところでSSHが繋がってLinuxコマンドが打てるようになった瞬間の安心感って一体なんなんでしょうね。

USBパススルーの無効化

パススルーされたら困るので無効化しておく。

#状態を確認
/etc/init.d/usbarbitrator status

#runningしているなら止める
/etc/init.d/usbarbitrator stop

#自動起動も止める
chkconfig usbarbitrator off



物理的にぶっ刺して認識されるか確認

とにかく刺さっているかを確認。
私が刺したのはTOSHIBAなので、表示はこうなった。

[root@localhost:~] lsusb
Bus 002 Device 002: ID 0930:6544 Toshiba Corp. TransMemory-Mini / Kingston DataTraveler 2.0 Stick



kernelのログを見る

USBはSCSIバイス扱いらしい。接続したかどうかがログから分かる。

cat /var/log/vmkernel.log | grep "ScsiDevice"

バイス名とともに「Successfully」と出てくれば接続成功。
65854)ScsiDevice: 6092: Successfully registered device "mpx.vmhba64:C0:T0:L0" from plugin "NMP" of type 5

バイス名を確認

[root@localhost:~] ls /dev/disks/
mpx.vmhba0:C0:T0:L0                   vml.0000000000766d686261303a303a30
mpx.vmhba0:C0:T0:L0:1                 vml.0000000000766d686261303a303a30:1
mpx.vmhba0:C0:T0:L0:5                 vml.0000000000766d686261303a303a30:5
mpx.vmhba0:C0:T0:L0:6                 vml.0000000000766d686261303a303a30:6
mpx.vmhba0:C0:T0:L0:7                 vml.0000000000766d686261303a303a30:7
mpx.vmhba0:C0:T0:L0:8                 vml.0000000000766d686261303a303a30:8
mpx.vmhba32:C0:T0:L0                  vml.0000000000766d68626133323a303a30
mpx.vmhba32:C0:T0:L0:1               vml.0000000000766d68626133323a303a30:1

下の2行が追加したUSB。
末尾の「:1」というコロン+数字はパーテーションを指す。
よってディスクはホストの「mpx.vmhba0:C0:T0:L0」とUSBで追加した「mpx.vmhba32:C0:T0:L0」の2ディスクということになる。

gptラベルを付ける

partedUtil mklabel /dev/disks/mpx.vmhba32:C0:T0:L0 gpt

ついでに、この「gpt」というのはGUIDパーティーションテーブルという標準規格であって、ラベルと言っても視認性のために自由に命名して付けるものではない。

パーティションテーブルをセットする

まずは現在のパーティションを調べる。

[root@localhost:~] partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0
gpt
942 255 63 15137280

シリンダー数、ヘッダ数、トラックあたりのセクター数、セクター数、という4つの数字が表示される。


パーティションセットに必要な「エンドセクター」の数字を計算する。

eval expr $(partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 | tail -1 | awk '{print $1*$2*$3 -1}')

ここ、ググると出てくる記事はほとんど乗算記号「*」をダブルクォーテーションで括ってるんだけど、それすると計算式が表示されるだけで、計算結果が返ってきません。
ESXiのバージョンによっては括らないといけないんですかね。


上記で計算したエンドセクターを3つ目の引数にあててパーティションセット。

partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 [計算した数字] AA31E02A400F11DB9590000C2911D1B8 0"

引数は公式に書いてあるとおり5つあって、4つ目は「GUID」。このGUIDは、VMFSフォーマットする今回は絶対に上記の文字列になります。
f:id:hiro-29:20210705181129p:plain

1つ目が1、2つ目が2048、最後のアトリビュートが0というのはこの場合は固定でいいらしい。理由はどこかのブログさんが書いてくれてましたが忘れました。

やっとフォーマット

ここのボリューム名は自由に命名するやつ。GUIにデータストアとして表示される名前です。
ディスクは末尾の「:1」に注意。パーティションに対してフォーマットするというわけですね。
カーソルが返ってくるまで数秒間だけかかる。

vmkfstools -C vmfs6 -S [ボリューム名] /dev/disks/mpx.vmhba32:C0:T0:L0:1


ちゃんとフォーマットされたか確認。
Typeが「vmfs6」でVolumeNameが命名した通りのが表示されればおk

esxcli storage filesystem list


あとはGUIでデータストアが追加されているか確認。
f:id:hiro-29:20210705183321p:plain



というわけでここの一連の作業ログ。

[root@localhost:~] eval expr $(partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 | tail -1 | awk '{print $1*$2*$3 -1}')
15133229
[root@localhost:~] partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 15133229 AA31E02A400F11DB9590000C2911D1B8 0"
gpt
0 0 0 0
1 2048 15133229 AA31E02A400F11DB9590000C2911D1B8 0
[root@localhost:~] vmkfstools -C vmfs6 -S USB-ADD-DS /dev/disks/mpx.vmhba32:C0:T0:L0:1
create fs deviceName:'/dev/disks/mpx.vmhba32:C0:T0:L0:1', fsShortName:'vmfs6', fsName:'USB-ADD-DS'
deviceFullPath:/dev/disks/mpx.vmhba32:C0:T0:L0:1 deviceFile:mpx.vmhba32:C0:T0:L0:1
ATS on device /dev/disks/mpx.vmhba32:C0:T0:L0:1: not supported
.
Checking if remote hosts are using this device as a valid file system. This may take a few seconds...
Creating vmfs6 file system on "mpx.vmhba32:C0:T0:L0:1" with blockSize 1048576, unmapGranularity 1048576, unmapPriority default and volume label "USB-ADD-DS".
Successfully created new volume: 60e2cd7f-2bb1c6ca-776f-000c29f7ff49
[root@localhost:~] esxcli storage filesystem list
Mount Point                                        Volume Name                                 UUID                                 Mounted  Type            Size          Free
-------------------------------------------------  ------------------------------------------  -----------------------------------  -------  ------  ------------  ------------
/vmfs/volumes/60dd7776-53fb0668-14f9-000c29f7ff49  datastore1                                  60dd7776-53fb0668-14f9-000c29f7ff49     true  VMFS-6   14763950080    4564451328
/vmfs/volumes/60e2cd7f-2bb1c6ca-776f-000c29f7ff49  USB-ADD-DS                                  60e2cd7f-2bb1c6ca-776f-000c29f7ff49     true  VMFS-6    7516192768    6007291904
/vmfs/volumes/60dd7776-3d07350c-1467-000c29f7ff49  OSDATA-60dd7776-3d07350c-1467-000c29f7ff49  60dd7776-3d07350c-1467-000c29f7ff49     true  VFFS    128580583424  125620453376
/vmfs/volumes/eefa9f0a-b642b9f3-748f-e0ca4678d024  BOOTBANK1                                   eefa9f0a-b642b9f3-748f-e0ca4678d024     true  vfat      4293591040    4085121024
/vmfs/volumes/86095575-d64702ae-028b-84b6d880d33b  BOOTBANK2                                   86095575-d64702ae-028b-84b6d880d33b     true  vfat      4293591040    4293525504

自分のノートPCで試用版ESXi7.0を動かす

自宅PCでESXi7.0を動かします。
その後、USBメモリを挿してデータストア化する。
まずは環境整備から。

環境

VMware Workstationをダウンロード

無料評価版を使います。
www.vmware.com

正規のルート?から行くと、こうやって言われてDLできない。

Content Not Available Dear user, the web content you have requested is not available.

ESXi7.0 をダウンロード

my.vmware.com

アカウント登録しないとDLできません。
試用期間は60日間。

インストール

f:id:hiro-29:20210705155135p:plain
WorkStationを、インストーラー通りにインストール。

VMware WorkStation がインスコできたので、ESXi(.isoファイル)を取り込んで起動します。

起動(パワーオン)

f:id:hiro-29:20210705161144p:plain
なんやこれ。

どうも、「Intel virtual technology」というのがBIOSでenableになっていないんじゃないか、ということらしい。
そういうわけでこちらのサイトさんを見ながら素直にenableに変更。
https://network-server-infra.com/2019/02/17/vmware-player%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84%ef%bc%9f/network-server-infra.com

ちなみに、このVT-xとかいう項目は上記サイトさんのメニューとは別の場所で、たしか「Security」のタブ内にあった。
しかも「Intel Virtual Technology」と「Intel Virtual Technology feature」みたいなやつが2つある。featureだけ使わないとかそんな事ありうる?と思いつつ、両方enableに…。
(この2つの違いはちゃんと調べてません)


でも、やっぱり上手く行かない。
Dockerを入れた時にWSL2を有効にしたのが競合しているらしい。
そういうわけで、こちらのサイトさんの通りにPowerShellからWSL2を停止し、再起動。
degitech91.com

bcdedit /set hypervisorlaunchtype off

やっと動いた。