コマンド等のメモ

個別にページを作るまでもない分量の雑多な備忘録。

形式は自動判別。vを入れると処理したファイル名が表示されるてマトリックスみたいになる。

tar -xf ファイル.tar.gz

内容が増えたらページを独立させる。

元ネタ

スマホのアプリでも効くが250件前後までしか処理できない。PC版ブラウザは1万件前後まで処理できるので何度か根気よくやる必要がある。

  • is:unread category:promotions older_than:1y
    未読で広告扱いで1年以上前のメールを探す。
  • is:unread category:social older_than:6m
    未読でソーシャルメディアからの通知扱いで6か月以上前のメールを探す。
  • -is:important has:nouserlabels
    重要なメールを除外しラベルがついていないメールのみマッチ
  • before:yyyy/mm/dd
    重要なメールを除外しラベルがついていないメールのみマッチ

コマンドラインを使ったVMware ESXiの更新方法。

たまにしかやらないからやり方忘れる。。。

再起動すればアップデートが適用される

esxcli network firewall ruleset set -e true -r httpClient
esxcli software profile update -p "ESXi-6.5.0-20180304001-standard" -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" --no-hardware-warning
esxcli network firewall ruleset set -e false -r httpClient

ESXi-6.5.0-20180304001-standardの部分は VMware ESXi 6.5.0 Patch History で調べることが出来る。

Got no data from process: LANG=en_US.UTF-8 /usr/lib/vmware/esxcli-software profile.update -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" -p "ESXi-7.0U3g-20328353-standard"

上記のようなエラーが出る場合は、/usr/lib/vmware/esxcli-software を直接実行すればエラーの内容がわかる。

# /usr/lib/vmware/esxcli-software profile.update  -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" -p "ESXi-7.0U3g-20328353-standard"
ERROR: [HardwareError]
ERROR: Hardware precheck of profile ESXi-7.0U3g-20328353-standard failed with warnings: <CPU_SUPPORT WARNING: The CPU in this host may not be supported in future ESXi releases. Please plan accordingly.>
ERROR: 
ERROR: Apply --no-hardware-warning option to ignore the warnings and proceed with the transaction.
ERROR: Please refer to the log file for more details.

CPUが古いせいなのでesxcli に–no-hardware-warningをつけてあげるとよし

うちはそれでも通らなかったので

 /usr/lib/vmware/esxcli-software profile.update  -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" -p "ESXi-7.0U3g-20328353-standard" --nohwwarning

を使用した。

サイズが大きいVMware_locker_toolsの更新がが原因で失敗するので、/tmpに落としてから手動でインストールする。

cd /tmp
wget http://hostupdate.vmware.com/software/VUM/PRODUCTION/main/esx/vmw/vib20/tools-light/VMware_locker_tools-light_6.5.0-1.47.8285314.vib
esxcli software vib install -f -v file:/tmp/VMware_locker_tools-light_6.5.0-1.47.8285314.vib

vibのURLは上記サイトで調べることが出来る。 ESXiのwgetはBusyBoxなのでSSLを使えないようです。

/etc/rc.local.d/local.shのexit 0の前に書く。古いバージョンにあったbusyboxコマンドは無いので要注意

/bin/echo "* * * * * 実行したいコマンド" >> /var/spool/cron/crontabs/root
/bin/kill $(cat /var/run/crond.pid)
/bin/crond

http://mmurayama.blogspot.jp/2016/01/ipmitool-on-vmware-esxi.html のパッケージがESXi6.5でそのまま使える。

インストールされるバイナリは/opt/ipmitool/bin/ipmitool

下記を/etc/rc.local.d/local.shに仕込むと良い。

watchdogの初期設定と初期化(600秒で電源OFF→電源ONする)

/opt/ipmitool/bin/ipmitool raw 0x6 0x24 0x4 0x23 0xa 0x3e 0x70 0x17 

再起動するかipmitool mc watcdog offを行うと設定は初期化されるっぽい。

コマンドの意味は

http://support.express.nec.co.jp/tech/servermanagement_on_linux_oss_whitepaper/ServerManagement_on_Linux_OSS_WhitePaper_1.00.pdf

NECのマニュアルですがipmitoolを使ったwatchdogの初期設定のやり方は他のメーカーのサーバーでも共通して使えます。

(うちの鯖はsupermicr● X9SCL-Fです)

cronで5分(300秒)おきにタイマーをリセット

/bin/echo "*/5 * * * * /opt/ipmitool/bin/ipmitool mc watchdog reset" >> /var/spool/cron/crontabs/root
  • ESXi 6.5には python3.5が入っている。何かに使えるかもしれない

いろんな場面でよく使うコマンド集

openssl 1.1.1以降はワンライナーで可能

バッチファイルに書いているので%1にはホストのFQDNが入る。

openssl req -new -newkey rsa:2048 -keyout %1.key -sha256 -nodes -extensions v3_req -subj "/C=JP/ST=Tokyo/L=Takagaya-shi/O=Hoge Corp./OU=Hoge/CN=%1" -out %1.csr -addext "subjectAltName = DNS:%1"

-x509 -days 365を追加すると直ちにオレオレ証明書が出来る

PFXへの変換コマンドがDER形式だと通らないのでいったんPEM形式で作成する。

openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=Peace Electric Machine Owner Key/" -out MOK_PEM.crt

MokManagerがDER形式のみ認識するのでDERに変換する。

openssl x509 -in MOK_PEM.crt -inform PEM -out Mok_DER.cer -outform DER

signtool.exeがPFXのみ認識するのでPFXに変換する。

openssl pkcs12 -export -inkey Mok.key -in Mok.crt -out Mok.pfx

いろいろ動いてるからド忘れするんだわ

pfexec pkg image-update

1.18用。アイテムがロストする原因になり得るのでALL Off Fabricなどで設定必須

blacklist.json5
{
	// Inventories that should not be sorted
	"doNotSortList": [
		"dankstorage:portable_dank_5",
		"dankstorage:dank_2",
		"dankstorage:portable_dank_4",
		"dankstorage:dank_3",
		"dankstorage:portable_dank_3",
		"dankstorage:dank_1",
		"dankstorage:portable_dank_2",
		"dankstorage:portable_dank_7",
		"dankstorage:portable_dank_6",
		"dankstorage:portable_dank_1",
		"dankstorage:dank_6",
		"dankstorage:dank_7",
		"dankstorage:dank_4",
		"dankstorage:dank_5"
	],
	// Inventories that should not display any sort buttons
	"hideSortBtnsList": []
}

LinuxやESXiをインストールしたシステムのBIOSを更新する手順。

メーカー系マザーボードだとWindows用しか用意されていないのでメモ。

UEFIに更新機能があるならそっちを使ったほうがいい。

AMI Aptio UEFI 向け。

書き換えツールとBIOSが自己解凍形式になっていて普通に解答できない場合。

ただし取り出したROMファイルが使い物になるかどうかは別の話

https://github.com/platomav/BIOSUtilities

普通にやる場合
AfuEfix64.efi ファイル名 /p /b /n 
Supermicro系(ほぼ全部書き換え)
AfuEfix64.efi ファイル名  /P /B /N /K /R

書き換えようとしているMEのバージョンとツールのバージョンをそろえないと通らないので適切なものを選ぶ

FWUpdLcl.efi -f ファイル名

エラーが出る場合は電源切ってから電源入れなおすか、書き換えを許可するためのジャンパーがどっかにないか探す。

  • 電子書籍のデータをターゲットにし、画像の高さを統一する
  • Python 3.9向け
  • あくまで個人用
imgresize.py
from PIL import Image
import os
import glob
import shutil
import subprocess
 
maxheight = 2000
w2xcpp = './waifu2x-converter/waifu2x-converter-cpp.exe'
outformat = 'jpg'
outquality = 80
 
for infile in glob.glob('./in/**', recursive=True):
	if os.path.isdir(infile):
		continue
	try:
		outdir = os.path.join("./out/", os.path.basename(os.path.dirname(infile)))
		os.makedirs(outdir, exist_ok=True)
 
		# 外部に渡すため絶対パスに変換
		infile = os.path.abspath(infile)
		outfile = os.path.abspath(os.path.join(outdir, os.path.splitext(os.path.basename(infile))[0]+'.'+outformat))
 
		# 出力先が存在する場合は処理しない
		if os.path.exists(outfile):
			print("FILE EXISTS!", outfile)
			continue
 
		img = Image.open(infile)
 
		# double型のまま処理できるので丸めるのやめた
		scale = maxheight / img.height
 
		# 丸めたスケールが1倍以下の時とサイズが最大以上の時は処理せずコピーする
		if scale <= 1.0 or img.height >= maxheight:
			print("SIZE OVER!", outfile)
			print("height:", img.height)
			print("scale:", scale)
 
			if os.path.splitext(os.path.basename(infile))[1] == os.path.splitext(os.path.basename(outfile))[1] :
				shutil.copy2(infile, outfile)
			else :
				# 画像形式を統一する
				print("Convert to:", outformat)
				img = img.convert('RGB')
				img.save(outfile, quality=outquality)
			continue
 
		# スケールが2以上の場合は2とし、3倍以上の拡大を行わない
		if scale >= 2.0: scale = 2.0
 
		w2xcpp = os.path.abspath(w2xcpp)
 
		subprocess.run(f'{w2xcpp} --scale-ratio {scale} -f {outformat} -q {outquality} -j 4 -p 0 -i "{infile}" -o "{outfile}"', shell = True)
	except OSError as e:
		pass