「第28回シェル芸勉強会 大阪サテライト」レポート
04/22(土)に東京で行われた「jus共催 第10回初心者向けなのかと百条委員会化する午前のシェル勉強会/第28回基準値を超えるシェル芸勉強会」について、今回も大阪でサテライトしました!
イベント情報
東京(本家)
- 問題:【問題のみ】第28回基準値を超えるシェル芸勉強会 – 上田ブログ
- 模範解答付き:【問題と解答】第28回基準値を超えるシェル芸勉強会 – 上田ブログ
- togetter:第28回基準値を超えるシェル芸勉強会 - Togetterまとめ
今回も、大阪(私達)と、福岡でサテライト会場がありました。
大阪サテライト
さて、到着。 #シェル芸 pic.twitter.com/OLuKTKvYG1
— nmrmsys (@nmrmsys) 2017年4月22日
福岡サテライト
ぱぴろん(@papiron)さんによるまとめ
大阪サテライトレポート
参加者
今回の参加者は、私も含めて16人、うち、初参加は3名でした。
徐々に平均年齢が下がってきてなかなか良い感じです♪
会場のようす
午前
今泉光之さん「シグナルについて」 ※後半は @ryuichiueda さん
SIGNALの種類や役割について体系的に学んだり、trapして確かめたりなど。
シグナルはソフトウェア由来、割り込みはハードウェア由来 #シェル芸
— ぐれさん (@grethlen) 2017年4月22日
Linuxのシグナル一覧置いときますねhttps://t.co/C212EeQ2Cv#シェル芸
— 石井 久治 (@hisaharu) 2017年4月22日
SIGHUP 電話回線を切る、の意味の hang up から来てる、らしい。(電話回線でいろいろやってた時代の名残)
— T.Motooka (@t_motooka) 2017年4月22日
なるほど〜 #シェル芸
午後
sed地獄と思いきやawkゴリゴリな感じでした。
sed (普通の使い方) #シェル芸
— MSR (@msr386) 2017年4月22日
地獄を皆様におすそ分け #シェル芸
— ginjiro (@gin_135) 2017年4月22日
#シェル芸 地獄篇
— nmrmsys (@nmrmsys) 2017年4月22日
今回はなんというか……非常に疲れました……死屍累々
LTのようす
東京
大阪
今回もUstreamで配信して頂けました!(録画はナシです)
@KoharaKazuya さん 「シェル芸による git rev-list」
gitコマンドを使わず無理やりワンライナーでgitのログを閲覧するというシェル芸。 ダミーのgzipヘッダーを付けるのは他の処理でもたまにやるという声もありました。こわい。
gitのコミットオブジェクトの中身を #シェル芸 で覗く! pic.twitter.com/Se2bVJYBDV
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
いや、あのさあ。。。 #シェル芸 pic.twitter.com/LGofAD4oeG
— nmrmsys (@nmrmsys) 2017年4月22日
printf '\x1f\x8b\x08\x00\x00\x00\x00\x00'
— いるやん (@Iruyan_Zak) 2017年4月22日
よだれが出た#シェル芸
@msr386 さん 「FORK爆弾 密着24時」
みんな大好きFork爆弾。 それによってサーバが停止したときのクラッシュダンプを見るという、危険シェル芸から一歩踏み込んだ内容の発表でした。 リソースが枯渇して死亡というイメージはあると思いますが、 やはり実際に計測して何が起こっているのか確認するということは大事ですね!(しろめ
2番は @msr386 さん! #シェル芸 pic.twitter.com/T3Ao2jM0c6
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
#シェル芸 #大阪 pic.twitter.com/xHBGbUopOk
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
アーーッ!! #シェル芸 #大阪 pic.twitter.com/vX55acL7bO
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
いつでもカーネルパニックできるように、マジックSysRqを有効にする(お前は一体何を言ってるんだw #シェル芸
— nmrmsys (@nmrmsys) 2017年4月22日
時間の都合で省略しましたが、fork爆弾を24時間熟成させた結果
— MSR (@msr386) 2017年4月22日
総プロセス: 112940
bashゾンビプロセス: 46599
bash実行プロセス: 66341
となりました。24時間回さなくてもそんなに変わらないと思います、多分 #シェル芸 #大阪 pic.twitter.com/StQScSwqhs
@kunst1080 「Ubuntu on Bash on Ubuntu on Windows」
Bash on Ubuntu on Windows上でchrootを使い、別のUbuntuのコンテナを動かす……ということで実際に作成した環境をデモしました。 コンテナ内からコンテナ外のプロセスをkillできるのはいかがなものかと……
相変わらず頭がおかしいw #シェル芸 pic.twitter.com/mBw2O8O99e
— nmrmsys (@nmrmsys) 2017年4月22日
WSLが chroot対応した! #シェル芸
— nmrmsys (@nmrmsys) 2017年4月22日
親殺し #シェル芸
— いるやん (@Iruyan_Zak) 2017年4月22日
@nmrmsys さん 「SIerでもできる! シェル芸?」
https://dl.dropboxusercontent.com/u/54939588/slides/Shell-Arts-Can-Also-Be-The-SIer.html
とあるSIer向けの勉強会でシェル芸をやりたいという話があり、 それに向けてブラウザでbashを動かす環境はないか探してみたという内容でした。 他所様の環境でFork爆弾を投げるのはマジほんとやめてくださいね…… > 某参加者s(複数形)
4番手は @nmrmsys さん! #シェル芸 pic.twitter.com/SHxq16coLF
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
UNIX TERMINAL ONLINE #シェル芸 #大阪https://t.co/sNNbyegexx
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
@3socha さん 「SSM Run Command で遊ぶ」
https://horo17.github.io/aws-nest-call-slide/#/
「Windows ホストの PowerShell からイベントログに書き込む SSM Run Command を実行する Lambda Function を Linux ホストのシェルから実行する SSM Run Command」のワンライナーの説明でした。ネストしゅごい……(ぐるぐる~
ラストは @3socha さん! #シェル芸 #大阪 pic.twitter.com/4axZDGx2vi
— くんすと@埼玉2日目! (@kunst1080) 2017年4月22日
SSMはリモートからコマンドを叩き込む事が出来ます!(半笑い #シェル芸
— nmrmsys (@nmrmsys) 2017年4月22日
今回も濃ゆい発表をありがとうございましたm( )m 大阪のLTはジャンルを問わないので、ネタさえあれば大丈夫! どしどし発表しちゃって下さい~
まとめ
上田会長、東京・福岡・大阪の皆様、お疲れ様でした。
フェンリル様、いつも会場を使わせていただきましてありがとうございます!
次回もまたよろしくお願いします!!
追記
21世紀初頭、人々は生まれ、シェル芸をし、そして死んでいった。。。 #シェル芸
— nmrmsys (@nmrmsys) 2017年4月22日
DockerとLet's Encryptで自分用Mastodon鯖を立ててみた
自分用の設定メモ
事前準備
- conohaでdockerのインスタンスを作成
2.イメージ -> イメージタイプ = アプリケーション
に「Docker」っていうのがある
- docker-composeのインストール
- curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- ドメインの取得
- ufwで80番と443番のポートを開放
構成
docker-composeを使って、以下の2つの環境を作成
mastodon
- mastodonのAPサーバ
- ポートフォワードはやらない
https-portal
- Let’s Encryptを使ったHTTPS対応を全自動でやってくれるコンテナ
- 80番と443番のポートを開放する
- mastodonのネットワークに接続して
mastodon/web
を公開する
手順(というか設定メモ)
mastodon の環境作成
READMEの通りに進める。
※解説はいろんな人が書いてるので省略
最終的な設定ファイルはこんな感じ。
docker-compose.yml
データの永続化部分のコメントを外して、ポートフォワードの部分をコメント化
version: '2' services: db: restart: always image: postgres:alpine ### Uncomment to enable DB persistance volumes: - ./postgres:/var/lib/postgresql/data redis: restart: always image: redis:alpine ### Uncomment to enable REDIS persistance volumes: - ./redis:/data web: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec rails s -p 3000 -b '0.0.0.0' # ports: # - "3000:3000" depends_on: - db - redis volumes: - ./public/assets:/mastodon/public/assets - ./public/system:/mastodon/public/system streaming: restart: always build: . image: gargron/mastodon env_file: .env.production command: npm run start # ports: # - "4000:4000" depends_on: - db - redis sidekiq: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec sidekiq -q default -q mailers -q pull -q push depends_on: - db - redis volumes: - ./public/system:/mastodon/public/system
.env.production
SECRETとドメインとSMTPの設定をしただけ。 SMTPにはとりあえずで使い捨てのGMailアカウントを使用。
11行目付近
# Federation LOCAL_DOMAIN=mastodon.kunst1080.net LOCAL_HTTPS=true
36行目付近
# E-mail configuration # Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers SMTP_SERVER=smtp.gmail.com SMTP_PORT=587 SMTP_LOGIN=<GMailのメールアドレス> SMTP_PASSWORD=<GMailのパスワード> SMTP_FROM_ADDRESS=<GMailのメールアドレス> SMTP_OPENSSL_VERIFY_MODE=none
https-portal の環境作成
docker-compose.yml
mastodonのネットワーク(mastodon_default)へ接続して、mastodonのweb:3000
を公開する。
version: '2' services: https-portal: image: steveltn/https-portal:1.0.1 ports: - '80:80' - '443:443' restart: always environment: DOMAINS: 'mastodon.kunst1080.net -> http://web:3000' FORCE_RENEW: 'true' STAGE: 'production' networks: - mastodon_default networks: mastodon_default: external: true
※STAGE: 'production'
を付けないとオレオレ証明書になってしまうので注意。
おまけ: 管理者の設定方法
$ docker-compose run --rm web rails mastodon:make_admin USERNAME=kunst1080
参考URL
Mastodon
- GitHub - tootsuite/mastodon: A GNU Social-compatible microblogging server
- Emails are not sent - Actionmailer: "End of file reached" · Issue #934 · tootsuite/mastodon · GitHub
- Dockerで雑にMastodonを起動する方法 - Qiita
https-portal
JavaでFizzBuzzをさくっと
Stream APIを使って標準ライブラリだけでぺぺっと書いたらこんな感じになった。
九九の答えが36種類であることの証明
まず、九九に現れる式に使われる数字の組み合わせの数を数えます。
計算式を m * n
とすると mは1~9
、 nは1~9
です。
そうすると、 mとnが異なるときに使われる数字の組み合わせ は、1~9から2つの数字を選ぶ組み合わせなので
9C2 = (9 * 8) / (2 * 1) = 36 通り …… ①
となります。
また、 mとnが等しいときの組み合わせ は、1*1
、2*2
……9*9
となりますので
9 通り …… ②
となります。
①と②より、式に使われる数字の組み合わせの数 は
36 + 9 = 45 通り …… ③
となります。
ここから、 計算結果が重複するもの を取り除いて行きます。 計算結果が重複するものは、例えば
4 * 9 = 36 6 * 6 = 36
のようなもののことです。
ここで、 1から9までの数字を素因数分解 してみましょう。
1 2 = 2 3 = 3 4 = 2 * 2 5 = 5 6 = 2 * 3 7 = 7 8 = 2 * 2 * 2 9 = 3 * 3
このように、素数と合成数1が混ざっていることがわかります。
ここで、先程の式を見てみましょう
4 * 9 = 36 6 * 6 = 36
この式を素因数分解すると、
4 * 9 = (2 * 2) * (3 * 3) = 2 * 2 * 3 * 3 = 36 6 * 6 = (2 * 3) * (2 * 3) = 2 * 2 * 3 * 3 = 36
このように、全く同じ式になります。
九九の中にある 計算結果が重複するもの というのは、このように、 式に使っている数字の組が異なり、素因数分解した結果が等しい ものであると言えそうです。
ここで、 1から9までの数字を素因数分解 したものから、合成数だけを抜き出してみます。(9以下の合成数の一覧)
4 = 2 * 2 6 = 2 * 3 8 = 2 * 2 * 2 9 = 3 * 3
少し変形して
4 = 2 * 2 6 = 2 * 3 8 = 2 * 2 * 2 = 2 * 4 9 = 3 * 3
これらの式は、1の段の計算結果 と上記の計算式について、式に使っている数字の組が異なり、素因数分解した結果が等しい ことが明らかです。 よって、
1 * 4 と 2 * 2 1 * 6 と 2 * 3 1 * 8 と 2 * 4 1 * 9 と 3 * 3 の 4通り …… ④
を、1の段と計算結果が重複する式の数 として数え上げることができます。
では、9より大きい数ではどうでしょうか。
式に使っている数字が異なり、素因数分解した結果が等しい という定義と、 9以下の合成数の一覧 からもう一度考えてみます。
4 = 2 * 2 6 = 2 * 3 8 = 2 * 2 * 2 9 = 3 * 3
ここへ、1
と2
と3
を加えてみます。
1 = 1 2 = 2 3 = 3 4 = 2 * 2 6 = 2 * 3 8 = 2 * 2 * 2 9 = 3 * 3
順番を少し変えます。
1 = 1 2 = 2 3 = 3 4 = 2 * 2 6 = 2 * 3 9 = 3 * 3 8 = 2 * 2 * 2
上記の一覧の中にある数字から、 素因数分解した結果が等しくなるような組み合わせ を探せば良さそうです。
まず、計算して項が3つになる組み合わせは
(2 * 2) * 2 = 2^3 (2 * 2) * 3 = 2^2 * 3 (2 * 3) * 2 = 2^2 * 3 (2 * 3) * 3 = 2 * 3^2 (3 * 3) * 2 = 2 * 3^2 (3 * 3) * 3 = 3^3
です。上記の内、計算結果が重複している式の組み合わせは
2^2 * 3 → (2 * 3) * 2 と (2 * 3) * 2 2 * 3^2 → (2 * 3) * 3 と (3 * 3) * 2 の 2通り …… ⑤
です。次に、計算して項が4つになる組み合わせは
(2 * 2) * (2 * 2) = 2^4 (2 * 2) * (2 * 3) = 2^3 * 3 (2 * 2) * (3 * 3) = 2^2 * 3^2 (2 * 3) * (3 * 3) = 2 * 3^3 (2 * 3) * (2 * 3) = 2^2 * 3^2 (3 * 3) * (3 * 3) = 3^4 (2 * 2 * 2) * 1 = 2^3 (2 * 2 * 2) * 2 = 2^4 (2 * 2 * 2) * 3 = 2^3 * 3
です。上記の内、計算結果が重複している式の組み合わせは
2^4 → (2 * 2) * (2 * 2) と (2 * 2 * 2) * 2 2^3 * 3 → (2 * 2) * (2 * 3) と (2 * 2 * 2) * 3 2^2 * 3^2 → (2 * 2) * (3 * 3) と (2 * 3) * (2 * 3) の 3通り …… ⑥
です。
ここまでに算出してきた ③④⑤⑥ についておさらいすると
- ③ → 式に使われる数字の組み合わせの数 = 45通り
- ④ → 1の段と計算結果が重複する式の数 = 4通り
- ⑤ → 9より大きい数で、計算結果が重複する式の数(項が3つ) = 2通り
- ⑥ → 9より大きい数で、計算結果が重複する式の数(項が4つ) = 3通り
です。これらの数を使うと、以下のように式に使われる数字の組み合わせの数から計算結果が重複する式の数を取り除いた組み合わせは
式に使われる数字の組み合わせの数 - 計算結果が重複する式の数
45 - (4 + 2 + 3) = 36 通り
となります。
したがって、九九の答えとなる計算結果の数字は36種類であると言えます。
※もっとスマートな証明を誰か……
おまけ
ここまでの思考の流れ
掛け算の九九のパターン?
— くんすとのーと (@kunst1080) 2017年4月12日
9C2なので
echo 9\*8/2 | bc#シェル芸
あれ??おかしくね???
— くんすとのーと (@kunst1080) 2017年4月12日
1 * 4 = 4
— くんすとのーと (@kunst1080) 2017年4月12日
2 * 2 = 4
mnで、mが1~9、nが1~9なんだよな……
— くんすとのーと (@kunst1080) 2017年4月12日
mとnが*異なるとき*の組み合わせは36通りだけれど、mnとm'n'が同じな組み合わせもある。
— くんすとのーと (@kunst1080) 2017年4月12日
式のパターンだけで言えば、 9C2 + 9 で45通りか…
— くんすとのーと (@kunst1080) 2017年4月12日
九九の中の、計算結果が重複する数の一覧
— くんすとのーと (@kunst1080) 2017年4月12日
echo {1..9}\*{1..9}\;|bc|sort -n | uniq -c#シェル芸
n = m のときは1
— くんすとのーと (@kunst1080) 2017年4月12日
n != m のときは2以上
1~9の数字を2つ取って掛け合わせた時の値の組み合わせは・・・
— くんすとのーと (@kunst1080) 2017年4月12日
ほう…… pic.twitter.com/1WRRHhzlq2
— くんすとのーと (@kunst1080) 2017年4月12日
規則性が見えそうで見えない・・・
— くんすとのーと (@kunst1080) 2017年4月12日
3回出てくるっていうことは、n==mの部分集合なんだよな…
— くんすとのーと (@kunst1080) 2017年4月12日
んで4回出てくるのはn==mの部分集合ではない
— くんすとのーと (@kunst1080) 2017年4月12日
n==mでないものはコンビネーションの関係で必ず2n回出てくるはずなので…
— くんすとのーと (@kunst1080) 2017年4月12日
重複の最大値は4…why
— くんすとのーと (@kunst1080) 2017年4月12日
4ってことは同じ結果の式が2回出てくる
— くんすとのーと (@kunst1080) 2017年4月12日
81以下の素数と、9以下の素数をn倍して81以下になる数字種類の合計は81-36 = 45
— くんすとのーと (@kunst1080) 2017年4月12日
あと1
— くんすとのーと (@kunst1080) 2017年4月12日
10~81の中の素数と、それをn倍して81以下になる数の種類が45?
— くんすとのーと (@kunst1080) 2017年4月12日
10以上81以下の素数の一覧 pic.twitter.com/TsGB5O51fC
— くんすとのーと (@kunst1080) 2017年4月12日
ここから起こすのは難しそう
— くんすとのーと (@kunst1080) 2017年4月12日
九九の答えは全て1~9のn倍
— くんすとのーと (@kunst1080) 2017年4月12日
ではない
— くんすとのーと (@kunst1080) 2017年4月12日
3回登場するのは、計算結果が10以下になる累乗数と、その累乗数で81以下のもの
— くんすとのーと (@kunst1080) 2017年4月12日
素因数分解すると、こうなる。 pic.twitter.com/lQ5T7tRjKC
— くんすとのーと (@kunst1080) 2017年4月12日
ちなみに4回出てくるやつはこんな感じ pic.twitter.com/VNJta10BtL
— くんすとのーと (@kunst1080) 2017年4月12日
眠れなくなりそうなので風呂入ろ……
— くんすとのーと (@kunst1080) 2017年4月12日
だれか証明して><
答えが一致するっていうことは、素因数分解の結果が一致するということ…
— くんすとのーと (@kunst1080) 2017年4月12日
1~9の数字を素因数分解すると
— くんすとのーと (@kunst1080) 2017年4月12日
1:
2: 2
3: 3
4: 2 2
5: 5
6: 2 3
7: 7
8: 2 2 2
9: 3 3
これらの組み合わせを数えればよさそう
— くんすとのーと (@kunst1080) 2017年4月12日
もうちょいで証明できそうな感じだけど寝るしかない
— くんすとのーと (@kunst1080) 2017年4月12日
やばい九九のせいで今日何もしてない
— くんすとのーと (@kunst1080) 2017年4月12日
10C2の45から2, 3, 4(2*2), 6(2*3), 8(2*2*2), 9(3*3)使って重複をカットすればOK、っていうところまできた。
— くんすとのーと (@kunst1080) 2017年4月12日
MacでiTermの背景色を変更するシェルスクリプト
[ch_bg_color.sh]
#!/bin/bash R=$1 G=$2 B=$3 /usr/bin/osascript <<EOF tell application "iTerm" tell current session of current window set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))} end tell end tell EOF
AppleScriptを使ってるし完全にMac用。
Bash on Ubuntu on Windowsのchrootを試してみた
4/11の配信日が待ちきれないので、Insider Programに登録して新しいBash on Ubuntu on Windowsをいち早く試してみましたっ!
セットアップ
Windows Insider Program に登録し、Insiderのレベルを スロー に設定しました。
※登録してから更新が降ってくるまで、1日待ちました
Bash on Ubuntu on Windowsのバージョン確認
まずはBash on Ubuntu on Windowsの環境のバージョンを確認します。
uname -a
と cat /etc/lsb-release
で確認です。
uname -a
が
Linux DESKTOP-T3CMM04 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 GNU/Linux
cat /etc/lsb-release
が
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
ですね。
ここで、Creators Updateしてない版のbash(以降、「現行」)の方も見てみましょう。
※別マシンなので解像度は小さいですが…‥
見ての通り、Ubuntuのバージョンが14.04
から16.04
に上がったのがわかります。
日本語の表示
現行ではターミナルに日本語を入力すると横が切れたりしますが、Creators Update適用後は切れずに表示されるよう改善されたみたいです。
chroot対応の確認 - コンテナで遊ぼう
現行のBash on Ubuntu on Windowsではchrootに対応しておらず、中でコンテナを起動させたり、無理やりArchLinuxを動かしてもpacman
でエラーが出るといった問題が発生1していました。
リリースノート2によると、Creators Updateにchroot対応が含まれているようです。そういうことなので、いろいろコンテナを作って試してみたいと思います。
※自分の中ではこれが今回の一番の目玉!!!
Ubuntuのコンテナの作成
必要なパッケージのインストール
# apt install debootstrap
debootstrapを使ったUbuntuのインストール
違いがわかりやすいよう、XenialではなくVividを入れます。
# debootstrap vivid /srv/chroot/vivid http://ftp.riken.go.jp/Linux/ubuntu/ # cp -L /etc/resolv.conf /srv/chroot/vivid/etc
デバイスのマウント
bashを閉じる度に設定し直しになるので注意
# cd /srv/chroot # mount -t proc none vivid/proc # mount -t sysfs none vivid/sys # mount -o bind /dev vivid/dev
ログインと確認
# chroot /srv/chroot/vivid /bin/bash
コンテナ内で
# uname -a # cat /etc/lsb-release
ちゃんと環境が変わってますね!
※少し遊んでみましたが、chroot環境ではターミナル内でスクロールできなかったり日本語を入力できなかったりしますね。()これは普通のLinuxとかでのchrootと同じかな)
sudo付きでchrootするとわかりやすいんですが、ホストのプロセスが見えてるっぽいんですよね……
Debianのコンテナの作成
※動かそうとしたらセグフォったのでパス!
ArchLinuxのコンテナの作成(ブートストラップイメージを使う方法)
ArchWiki3を見ながらインストールを進めます。
ブートストラップイメージの取得と展開
# cd /tmp # wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/latest/archlinux-bootstrap-2017.04.01-x86_64.tar.gz # tar xzf archlinux-bootstrap-2017.04.01-x86_64.tar.gz # mv root.x86_64 /srv/chroot/arch
デバイスのマウント
# mount --bind /srv/chroot/arch /srv/chroot/arch # cd /srv/chroot/arch # cp /etc/resolv.conf etc # mount -t proc /proc proc # mount --rbind /sys sys # mount --rbind /dev dev # mount --rbind /run run
pacmanの設定
pacmanで使用するmirrorlist
のファイルを先に修正しておきます。
# vim /srv/chroot/arch/etc/pacman.d/mirrorlist
好きなミラーサーバのコメントを外しておきます。
ログインと環境のセットアップ
ログイン
# chroot /srv/chroot/arch /bin/bash
コンテナ内で環境をセットアップ
# pacman-key --init # pacman-key --populate archlinux # pacman -Syy # pacman -S base
動作確認(gitのインストール)
# pacman -S git
Archちゃん動きました。
ArchLinuxのコンテナの作成(LiveCD イメージを使う方法)
airootfs.sfsの取得
# apt install -y squashfs-tools p7zip-full # wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/latest/archlinux-2017.04.01-x86_64.iso # 7z x archlinux-*.iso # cp arch/x86_64/airootfs.sfs /srv/chroot/
airootfs.sfsからルートイメージの取り出し
# cd /srv/chroot # unsquashfs airootfs.sfs # mv squashfs-root arch2 # rm airootfs.sfs
デバイスのマウント
# mount --bind /srv/chroot/arch2 /srv/chroot/arch2 # cd /srv/chroot/arch2 # cp /etc/resolv.conf etc # mount -t proc none proc # mount -t sysfs none sys # mount -o bind /dev dev # mount -o bind /dev/pts dev/pts
ログインと環境のセットアップ
ログイン
# chroot /srv/chroot/arch2 /bin/bash
コンテナ内で環境をセットアップ
# pacman-key --init # pacman-key --populate archlinux # pacman -Syy
動作確認(gitのインストール)
# pacman -S git
どちらの方法でも動くようです。
環境をArchLinuxに入れ替える
前回(http://www.kunst1080.net/entry/2016/08/26/001940)と同じ手順でできました。
違うところは
- isoのダウンロード用URLが変わってるので要チェック
- resolv.conf書きましょう
- pacmanでエラー出なくなってました。
前よりちゃんと使えそうです。
ひとまずこんな感じで!
これは本格的に色々コンテナ作って遊べそうです!!
参考URL
Vue.jsでリストの一部をレンダリングする
v-for="item in items"
でアイテムのリストを描画する際、items
をslice
してやることでリストの一部だけを描画することができるようです。
※やってみたらできた;)
サンプルコード
<html><body> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.4/vue.min.js"></script> <div id="sample"> <h4>List1</h4> <ul> <li v-for="item in items.slice(0,2)"> item = {{item}} </li> </ul> <h4>List2</h4> <ul> <li v-for="item in items.slice(2,4)"> item = {{item}} </li> </ul> <h4>List3</h4> <ul> <li v-for="item in items.slice(4,6)"> item = {{item}} </li> </ul> </div> <script> var vm = new Vue({ el: "#sample", data: { items: ["a", "b", "c"] } }); // 要素を追加すると、sliceで割り当てられた部分に描画される vm.items.push("d"); vm.items.push("e"); vm.items.push("f"); </script> </body></html>
サンプル表示