minikube v 0.25.2 を Windows 10 Pro 1803 と hyper-v で使ってみる
tag: minikube,hyperv
だいたい上の記事の通りでOK。
ウチではminikube用仮想ネットワークスイッチを作成すると、なぜかWindows側のDNSの設定が消えてしまったので、 コントロールパネル→ネットワークとインターネット→ネットワーク接続→minikubeNATのプロパティを開く →インターネットプロトコルバージョン4(TCP/IPv4)のプロパティ→次のDNSサーバのアドレスを使う からDNSを手動で設定した。
外部ネットワーク側に仮想スイッチを作っているので、LANというかWindows PCの外側からminikubeが見えることに注意。minikube自体はセキュリティとか考慮してないのでNATの内側に建てるのが基本。
minikubeのIPアドレスは、LANにあるDHCPから取得しており、LAN内のIPアドレスを消費している点にも注意。
hyper-vを使う場合は、管理者権限を持つPowerShellからminikubeを起動する。
上で作った仮想スイッチの名前が「Primary Virtual Switch」の場合、起動コマンドの例は以下。
minikube start --vm-driver hyperv --hyperv-virtual-switch "Primary Virtual Switch" --memory 4096 --disk-size 30G
hyper-vを使っている時と、virtualboxを使っている時でminikubeの起動オプションが違うので、PowerShellから判定。
Get-VM if ( $LastExitCode ) { minikube start --vm-driver hyperv --hyperv-virtual-switch "Primary Virtual Switch" --memory 4096 --disk-size 30G } else { minikube start --memory 4096 --disk-size 30G }
Docker for Windowsの2018.02 Edge版にはKubernetesが搭載されているようだけど、Docker for Windows 2018.03通常版には まだKubernetesが載っていないので、今しばらくminikubeには頑張ってもらわねばなるまい
HTTP Range Request (レジュームダウンロード) 実装してみた
tag: wiki,http
参考資料
要約
実装後、ブラウザからのPDFファイルの表示で実験してみた
スマホからPDF見る時に、部分的に取得してくれたら通信量節約できるかなぁ・・と思って実装してみたが、そんなことは無かった(涙)
以下詳細。
tomcat8にRange機能があるか確認
# rootになる sudo -i # テストデータを置く mkdir -p /usr/local/apache-tomcat-8.0/webapps/resumedata cat > /usr/local/apache-tomcat-8.0/webapps/resumedata/index.html << "EOF" <html><body><h1>It's works!</h1></body></html> EOF chown -R www /usr/local/apache-tomcat-8.0/webapps/resumedata # テストアクセス tomcatに対して直接 curl -v http://localhost:8180/resumedata/
実験結果。tomcat8にもRange機能があった。
root@n3050 /usr/local/apache-tomcat-8.0/conf $ # テストアクセス root@n3050 /usr/local/apache-tomcat-8.0/conf $ curl -v http://localhost:8180/resumedata/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8180 (#0) > GET /resumedata/ HTTP/1.1 > Host: localhost:8180 > User-Agent: curl/7.59.0 > Accept: */* > < HTTP/1.1 200 OK < Server: Apache-Coyote/1.1 < Accept-Ranges: bytes < ETag: W/"47-1527404419000" < Last-Modified: Sun, 27 May 2018 07:00:19 GMT < Content-Type: text/html < Content-Length: 47 < Date: Sun, 27 May 2018 07:01:06 GMT < <html><body><h1>It's works!</h1></body></html> * Connection #0 to host localhost left intact root@n3050 /usr/local/apache-tomcat-8.0/conf $
続いて、apache側から叩いた時の挙動。
# テストアクセス apacheからajp経由でtomcatに対して取得した場合 curl -v http://localhost:80/resumedata/
ajp経由でもAccept-Rangesは有効だった。
root@n3050 /usr/local/etc/apache24/Includes $ # テストアクセス apacheからajp経由でtomcatに対して取得した場合 root@n3050 /usr/local/etc/apache24/Includes $ curl -v http://localhost:80/resumedata/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 80 (#0) > GET /resumedata/ HTTP/1.1 > Host: localhost > User-Agent: curl/7.59.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Sun, 27 May 2018 07:07:28 GMT < Server: Apache/2.4.33 (FreeBSD) OpenSSL/1.0.2k-freebsd < Accept-Ranges: bytes < ETag: W/"47-1527404419000" < Last-Modified: Sun, 27 May 2018 07:00:19 GMT < Content-Type: text/html < Content-Length: 47 < <html><body><h1>It's works!</h1></body></html> * Connection #0 to host localhost left intact root@n3050 /usr/local/etc/apache24/Includes $
続いて、部分的な取得の実験。
# テストアクセス 部分的に取得してみる curl -v -H 'Range: bytes=0-10' http://localhost:80/resumedata/
おおー。とれた。
root@n3050 /usr/local/etc/apache24/Includes $ # テストアクセス 部分的に取得してみる root@n3050 /usr/local/etc/apache24/Includes $ curl -v -H 'Range: bytes=0-10' http://localhost:80/resumedata/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 80 (#0) > GET /resumedata/ HTTP/1.1 > Host: localhost > User-Agent: curl/7.59.0 > Accept: */* > Range: bytes=0-10 > < HTTP/1.1 206 Partial Content < Date: Sun, 27 May 2018 07:11:28 GMT < Server: Apache/2.4.33 (FreeBSD) OpenSSL/1.0.2k-freebsd < Accept-Ranges: bytes < ETag: W/"47-1527404419000" < Last-Modified: Sun, 27 May 2018 07:00:19 GMT < Content-Range: bytes 0-10/47 < Content-Type: text/html < Content-Length: 11 < * Connection #0 to host localhost left intact <html><bodyroot@n3050 /usr/local/etc/apache24/Includes $ root@n3050 /usr/local/etc/apache24/Includes $
メモメモ
tag:hyperv
やべぇ。ウチのHyper-Vの仮想スイッチマネージャー壊れたww
「仮想スイッチの一覧の取得中にエラーが発生しました」というエラーが出てなんもできん。
操作する前に以下のページで勉強する必要があったようだ
復旧マジムリ。OS再インスコしないとダメなレベル。Oracle Virtual Boxに戻ります。。。
Hyper-V + Docker for Windows 1803 だと、docker run -v C:\HOME\HOGE:/mnt/data とかできそうだったんだがなー
p.s.
失敗記事にtag打ったら、Hyper-V関連は失敗の記録しか残らなそうだなw
tag:git
ほほう。Git Hub有料化しちゃうかな? でかいバイナリ(warファイル)置いてるから課金額が怖いw
Go言語とか、言語仕様(import)からGit Hub前提なヤツはどうするんだろ? 櫛の歯が欠けるように依存ライブラリが抜け落ちたりするのかしら?
置いてるバイナリがでかいと言えばDocker Hubの方がでかいけども
Windows 64bit用のemacs日本語パッチ入り
tag:emacs
そふで6月号からメモメモ。
93,505bytes
ついったーのトレンド一覧がAppleづくしになっとる・・・
おそるべし
tag: gitlab
GitHubの避難所用途にGitLab https://gitlab.com/ にもアカウント取っておいた。freeプラン。
さて、何を置こうかな。。
ちなみに、GitLabのtrendingはこちら。GitHubのに比べると数値がおとなしい感じ。
most starts はこちら。GitLabのcommunity editionがトップだ。
GitLabはdocker image registryも内蔵してるんだね。CI/CD連携環境もメニューにある。
Kubernetesの実行環境ってメニューあるけど、実行環境もあるのかな? Google Container Engine (GKE) と連携可能なだけのような気もするけど。
ちと色々調べてみるか。
何気に超高機能でワロタww
避難所というか本拠地になりそうでナニコレこわい
個人用口座向けのQ&Aだけでも膨大でワロタw
これ裏では大変な開発やってそうな気配。
出力日付が順序不定になる場合がありますってことは、内部的には保存形式を変えたのかな?
GitLab CIでテスト・ビルド・デプロイを自動化する
tag: gitlab
gitlabについて調査の続き。
なるほど。 GitLab CIで使うビルド担当マシンには GitLab Runner というアプリをいれて、Jenkinsのslaveみたいに設定するのね。 そうするとビルド担当マシンはGitLab CIのmasterの言うこと聞くようになる。
あらかじめ .gitlab-ci.ymlを書いて、ビルド、unitテスト、デプロイで実施する内容をそれぞれshellで記載してgitlabにpushしておく。
GitLabに何か変更をpushすると、GitLab Runnerから起動されたDockerコンテナ上でビルド、テストする。
この他、非推奨だがビルド担当マシン上でshellを実行してビルドすることもできるようだ。 コンテナ上だとビルドしにくいヤツはこれで。 GitLab RunnerにはWindows版やMacOS版やFreeBSD版もあり、この場合はLinux docker コンテナは直接は使えないのでshellやcmd.exeを使うことになる。
ビルド後のアプリのバイナリと環境はdocker imageとしてregistryに登録しておく。
実行環境へのデプロイはshellで書いておくか、Google Kubernetes Engine (GKE) 連携を設定して実行する、と。
この手の内容ならJenkinsfileで書けないことはないけど、設定をyaml形式にすることで、Jenkinsfileのdeclarative pipeline(Gradle言語)を知らなくてもいいって利点がある。
どうせみんなビルド、unitテスト、デプロイの個別の手順はshell化(あるいは コマンドラインから一発化)してあるんだろ?みたいな暗黙の前提はあるけどw
p.s.
つか、Jenkinsfileに書くpipelineの説明 https://jenkins.io/doc/book/pipeline/syntax/ とか checkout scm plugin の説明 https://jenkins.io/doc/pipeline/steps/workflow-scm-step/ が読みづらくて解読困難www
Jenkinsfileは設定ファイルって言うよりGradle言語なので、自分で関数定義できたりおよそ何でもアリなんだけど、機能設定が多すぎてプロパティの説明だけで何十個もある状態なのが辛い。その分高機能って意味ではあるんだが。
yamlで簡単設定したいって要望が生まれるのはまあ当然か。Jenkinsの場合はJenkinsfileの「開発」になっちゃって、Jenkins職人しか触れなくなるしww
PKCS#8形式(公開鍵だけ入った形式)からauthorized_keysに書ける形式に変換する
tag: ssh
# PKCS#8形式。公開鍵だけ入った形。 cat > public-key.pem << "EOF" -----BEGIN PUBLIC KEY----- MIIBI.....以下省略 -----END PUBLIC KEY----- EOF chmod 0600 public-key.pem # ~/.ssh/authorized_keysに書ける形式に変換するコマンドは以下。 # 余談だが -m に使えるフォーマットは RFC4716, PKCS8, PEM のいずれか ssh-keygen -i -m PKCS8 -f public-key.pem
出力結果は ssh-rsa AAAA から始まる形式なので、そのまま ~/.ssh/authorized_keys に追記してOK。
Windows 10 ver.1803 の Edge でlocalhostが開けない
tag: edge
ウチで遭遇したのはlocalhostじゃなくて、192.168.1.xxとか、ローカルマシンのIPアドレスを指定してEdgeで開けなくなっていた事象だけども。
管理者権限のPowerShellかコマンドプロンプトで以下を実行すると良い。
CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
なんか毎回設定方法変えてきて不便だなEdgeって
PowerShellからvagrant sshすると端末制御が微妙なのでssh.exeを使ってログインするvagrant-ssh.ps1
tag:vagrant, powershell
WindowsのPowerShellからvagrant up ; vagrant ssh していると、端末制御が微妙なのでエディタなどが使いにくい。
chocolateyからインストールしたopenssh 7.7.1.1だと、Windows PowerShellの端末制御を割と真面目にやっているようで、 エディタも使えるし、なぜか知らんけど接続相手マシンがLANG=ja_JP.UTF-8なら日本語も表示できる。
vagrant sshの代わりに、vagrant-ssh を実行すると、vagrant ssh-configで入手した接続情報をもとにssh接続をかけるPowerShellのfunctionを作ってみた。
$profileに追記しておくか、単体ファイルをVagrantfileと同じ階層に置いて使う。
function vagrant-ssh { $sshdata = & vagrant ssh-config $targethost = write-output $sshdata | select-string "Hostname " | foreach-object { $_ -replace "HostName","" } $targethost = $targethost.Trim() $targetport = write-output $sshdata | select-string "Port " | foreach-object { $_ -replace "Port","" } $targetport = $targetport.Trim() $targetuser = write-output $sshdata | select-string "User " | foreach-object { $_ -replace "User","" } $targetuser = $targetuser.Trim() $targetidentfile = write-output $sshdata | select-string "IdentityFile " | foreach-object { $_ -replace "IdentityFile","" } $targetidentfile = $targetidentfile -replace "/","\" $targetidentfile = $targetidentfile.Trim() Write-Output "ssh.exe -i ${targetidentfile} $targetuser@${targethost} -p ${targetport}" & ssh.exe -i ${targetidentfile} -o StrictHostKeyChecking=no $targetuser@${targethost} -p ${targetport} }
p.s.
複数のvagrant hostに接続していると、接続先ホストはみんな localhost:2222なのでHOST KEY CHANGEDエラーになる。 「-o StrictHostKeyChecking=no」オプションを追加して回避。
PWA(Progressive Web Application)の代表例というTwitterモバイルサイト。
スマホブラウザで見ると割と軽く使えるのに、T90Chi-3775 (Atom Z-3775 1.4GHz, RAM 2GB) だとなんかもっさりしてる。
ひょっとしてIntel Atom CPUよりARM系CPUの方が断然高速だったりする?
Winタブ機が10インチ以上のCore i搭載機しか残ってないのって、10W以下のCPU競争でボロ負けしてるからなのかな
tag:hyperv
Hyper-Vの仮想スイッチマネージャーが起動しなくなったのでWindows 10 Pro 1803再インストール
再インストールと言っても、設定→回復→このPCを初期状態に戻す→個人用のファイルを保持する、というヤツを使った。
サードパーティー(Microsoft以外)のアプリはほとんど全部消えるので、地味に再インストールしていく。
なんとかHyper-Vの仮想スイッチマネージャーが起動するようになった;;
614,952bytes
tag: freebsd,x11,vcxsrv
VcXsrvというWindows用X11 Serverソフトが紹介されていたので、chocolateyからインストールして使ってみた。
おおうw いいねコレww 個々のアプリ毎に別ウィンドウを表示モードも、デスクトップマネージャーを使用するための全画面表示モードもある。
xterm上で日本語入力するにはちと設定が必要か。
ウチのFreeBSDの日本語入力設定は scim -anthy 型なので、XInputMethodにはscimを使うことにする。
~/.bashrcに以下のようなシェル関数を定義しておいて、X11画面をWindows側に飛ばす場合には関数を実行する。
# # use X from other machine # f-display() { if [ -z "$DISPLAY" ] ; then export DISPLAY=192.168.1.35:0.0 fi export XMODIFIERS='@im=SCIM' echo '*inputMethod: SCIM' | xrdb -merge is_there_scim=`ps -auxww | grep -v grep | grep scim` if [ -z "$is_there_scim" ]; then scim -d sleep 3 fi xterm -geometry 160x50 -fg white -bg black & }
p.s.
1アプリ1ウィンドウモードだと、画面全体のサイズ(xdpyinfo)が取得できないので、やたら小さなウィンドウサイズで起動するアプリが居るけどこれは仕方ないか。
Shift+Spaceでxtermに対してかな漢字変換を起動すると、画面右下に変換モードを表示するんだけど、ココはWindows側でもタスクバーが居て見えないww