pvcreate でディスクを追加しようとしたらエラーになった。
pvcreate /dev/sdb ignoring or filtering
なぜかエラーにメッセージが ignoring or filtering でディスクが追加できない
ext4 は エクサバイトを扱えるはずなのですが、resize2fs をしようとしたら、エラーになりました。
なぜかというと 32bit で利用されているディスクフォーマットだったらしい。
そういえば、もうずいぶん長いこと拡張を繰り返して使っているLVMのext4 でした。
32bitのままだと、 16TiB以上の容量を扱えないんですね。困りました。ですが、大丈夫。変更できます。
sudo umount /dev/mapper/data-my -a sudo e2fsck -fn /dev/mapper/data-my ## OKならyにする ## sudo e2fsck -fy /dev/mapper/data-my ## 64bit にすると、16TiBをこえられる resize2fs -b /dev/mapper/data-my # 12TBで10分ほど
resize2fs -b
のコマンドで 32bit → 64bit にすることが出来る。事前に fsck が必要だった。
新しいディスクをLVMに接続し LVに割り当てる。
pvmove でディスク交換
vg から取り外し
物理的に取り出し
vg からディスクを外す前に pvmoveコマンドを先に実行する必要がある。
pvmove は物理ディスクにかきこまれたlvmが使っている領域をべつのlvm/ lv の割り当てディスクに移動させて、物理ディスクを安全に解放してくれる。
なんて便利な機能。
しかし、よくミスる。 「取り外しー>容量減らすー>ディスク減らす」と考えて、ついついvgreduce を打ってしまいまがち
pvmove /dev/sdX /dev/sdY vgreduce vg-name /dev/sdX pvremove /dev/sdX resize2fs /dev/mapper/vg-name-lvname
この順番が大事
ついつい vgreduce をやlvextend先にやろうとしてしまう。
pvmove は本当に便利なのにね。
pvcreate /dev/sdX vgextent VGNAME /dev/sdX pvmove /dev/sdY /dev/sdX vgreduce VGNAME /dev/sdY pvremove /dev/sdY
こちらも順番が大事。
pvmove 中に再起動が必要になったとか。pvmove 中に端末がおちちゃって経過がわからないとか、time コマンドをつけたかったとか。そういときに一旦中止する時にどうするのか。
pvmove --abort
これでpvmoveをキャンセルできます。
LVMを必要以上に確保ししていて別のディスクに移したいとときは、
sudo mv /mnt/cryptDisk01/SOME_DATA /mnt/newDISK # 必要に応じ容量確保 sudo lvreduce -L -8T data/video --resizefs # 必要に応じて適当にLVを調整 sudo pvmove /dev/mapper/cryptDisk01 sudo vgreduce data /dev/mapper/cryptDisk01 sudo pvremove /dev/mapper/cryptDisk01 sudo lvextend -l 100%FREE data/video sudo resize2fs /dev/mapper/data-video
適宜やれば確実に終わる。8TBは数日かかった・・・
記述を変更
イオンカードにPCからログインすると、ワンタイムパスワードの送信画面になる。
これは、リスクベース認証と呼ばれるものであり、リスクが高いアクセスは「追加認証」を要求するという考えによるものです。
不思議なんですが、「スマホページ」からアクセスすると「追加認証」が発生しません。
Google 検索で、「イオンカード ログイン」 で検索してみてください。
Google検索はスマホページを優先的に表示します。そのためスマホページのログイン画面がまっさきに検索結果に上がってきます。
Google検索からログインページに到達すると、パソコンでも追加認証が発生しません
いいえ、イオンカードのセキュリティ対策が根本的に「誤り」です。
Google検索だけでたどり着くので、このようなアクセス方法は自然なものです。
イオングループが意図して隠しているわけでもありませんし、PCだけセキュリティを厳しくしていることは「明確に公開されていません」 つまり、私達が回避しても、不正アクセス禁止法にかかるようなものでもありません。
このような、セキュリティ対策にならないものを、リスクベース認証と呼称し、間違った概念を広めているイオングループは意識を改めてもらいたいと思います。
スマホページにはメールによるワンタイムパスワードを導入せず、パソコンからのアクセスのみにワンタイムパスワードを導入して煩雑にしているだけです。煩雑にすることがセキュリティでは無いと思います。
また、このようなアクセス方法を不正アクセス禁止法にもとづく不正アクセスというためにはGoogle検索という誰でもたどり着く公開ページからのアクセスをストップする必要があり、対策していないイオンカード側の落ち度と言えます。
とっととスマホページにも2段階認証を導入するか、PCブラウザからの2段階認証を見直す必要があると思います。
このような現状はもう1年以上続いています。
最近、イオンカードが取った対策は、ログインページを使いにくくすることという「とんでもない」対策でした。
ダイアログをだして、ページ遷移を促すのですね。これはひどい対策です。
iPad はスマホですか?PCですか?よくわかりませんが、2段階認証を回避されたくないという意図をビンビンに感じます。
私は、これをみてもう記事にして公開したほうがいいなと思った次第です。
さらに言えば、かりにアカウントを取られたとしてもカードの利用明細を閲覧には、経済的損害は発生しません。閲覧という行為に対するリスクベース認証として、現状は過剰すぎるのではないでしょうか。
登録情報の編集などリスクの高い変更についてリスクベース認証をするのは理解できますが、閲覧に二段階認証はやりすぎではないでしょうか。何度も書いてますが、「郵送」に比べてWEBページの閲覧は相当に煩雑であり、ユーザーに手間を押し付けるものであります。エコでもなんでもありません。郵便局の配達は、イオンカードの明細の有無に関係なくルートを巡っています。CO2削減にもなりません。ペーパー発行を控えてもエコにはなりません。コスト削減の言い訳に使うエコはエコロジーでなくエコノミーです。本当にエコロジーを実現したいのであれば配達先の集配局の近辺ででオンデマンド印刷して配達すればいいわけです。多大なコストを掛けたWEB明細を必須にするのは、利用率の改善の意図を疑ってしまいます。なぜ利用率が悪いのか、使い勝手が悪いのでは無いでしょうか。多大なコストを掛けて作ったWEB明細サービスやアプリが利用されないテコ入れであれば、「サンクコスト」としてとっとと諦めるか、ユーザー動線を調査をするのがあるべき姿だったと思われます。小手先の対応や必須化などと社内理論としか思えない言い訳につきあわされる私達利用者は溜まったもんじゃないですよね。
利用端末の登録をしましたが、ログインするたびにワンタイムパスワードの送信画面が表示されます。 | よくあるご質問| 暮らしのマネーサイト
xargs -n1 echo
空白区切りされた文字列をぱぱっと複数行にする。 xargs と echo を組み合わせると楽。
takuya@~$ echo hello world hello world hello world hello world | xargs -n1 echo hello world hello world hello world hello world
他にも色々と方法があると思う。 for を使うとか、bash の展開をつかって配列にするとか。アレコレ考えられるけど、xargs を使うのがシェルっぽくていいと思う。
migrate refresh とかだと全部のテーブルが再生成されちゃうので、別のテーブルデータを消さずに特定のテーブルだけを再構築したい。
指定したマイグレーションのファイルだけを実行する
artisan migrate:refresh --step=1 --path=/database/migrations/2019_09_18_182637_create_users_table.php
上記のコマンドは、次のように分解できる。
## マイグレーションを全部実行する
php artisan migrate:refresh
これと個数を組み合わせ
## マイグレーションを先頭から1つだけ php artisan migrate:refresh --step=1
さらにパスを指定する。
## マイグレーションを指定したファイルから1つだけ php artisan migrate:refresh --step=1 --path=/database/migrations/ファイル名
パスの設定や step の指定を忘れて migrate:refresh すると全部消えちゃうので注意が必要。
テーブルを追加するときにアレコレ試しているローカル環境で使う。
いちいち seeder や seed を使ってデータを追加するのも面倒なので。
テーブルの定義のマイグレーションを、指定して再実行したり、テーブル定義を書き直したりしたときに使います。
これを使うことで、テーブル定義のを書いながら何度も試せるので、マイグレーションをfresh でゼロからしてしまうことなくなるので便利です。
laravel だとテーブル定義を作りながら考えられるのはいいことだと思います。
migrate:status をつかえば、いまどこまでmigration が適用されているかわかる。
artisan migrate:status
マイグレーションの適用結果はデータベースに格納されている。それをコマンドから見ることができる。
https://stackoverflow.com/questions/45473624/laravel-5-4-specific-table-migration
char にキャストするときに長さをつける
select now()::char(30);
実行結果
sample> select now()::char(30); +--------------------------------+ | now | |--------------------------------| | 2019-09-13 15:27:51.427441+00 | +--------------------------------+ SELECT 1 Time: 0.086s
select current_timestamp::char(29)
実行結果
sample> select current_timestamp::char(29) +-------------------------------+ | now | |-------------------------------| | 2019-09-13 15:29:01.630241+00 | +-------------------------------+ SELECT 1 Time: 0.067s sample>
あんまり美しいやり方ではないけれど
cast の場合はこれ
select cast(random()*100 as integer);
::int
を使ったキャストを使う場合はこんな感じ
floor(random() * 1000 + 1)::int;
https://www.postgresql.jp/document/9.4/html/functions-math.html
プライベート・ブラウズ・モードでアクセスすれば、拡張機能のリクエストログをを隠すことが出来るが。
わざわざ拡張機能のためにプライベートブラウズで悪世するのも面倒ですよね。
そこで、devtool -> network -> filter にある、フィルタを使う方法があった。
-scheme:chrome-extension
ちなみに、以下が拡張機能のネットワークのログを隠す前です。
見比べてみたら減っているのがわかるでしょうか。
便利!!
たぶん無理です。 chrome-extension のログを隠すのは、セキュリティ上の問題だと思う。
Macに標準のサービスを使って設定しているPPP系 LT2P over TLS のような設定だとnetworksetup から出来る
scutil もいいけど、networksetup でもいい。私はこっち。
networksetup -connectpppoeservice "$VPN_NAME"
networksetup -disconnectpppoeservice "$VPN_NAME"
networksetup -showpppoestatus "$VPN_NAME"
networksetup はコマンドが多過ぎて、覚えられないで、bashrcに書くことにした。
#!/usr/bin/env bash if ! [[ $plat_name =~ darwin ]] ; then return; fi function vpn.getFullName(){ VPN_NAME=$(networksetup -listallnetworkservices | \grep $1 ); echo $VPN_NAME; } function vpn.isConnected(){ VPN_NAME=$( vpn.getFullName $1 ) [[ $(networksetup -showpppoestatus "$VPN_NAME" ) == connected ]]; } function vpn.disconnect { vpn.menu_icon.conceal VPN_NAME=$( vpn.getFullName $1 ) networksetup -disconnectpppoeservice "$VPN_NAME" } function vpn.menu_icon.conceal() { if type vpn_menu.py 2>&1 > /dev/null ;then vpn_menu.py -d fi } function vpn.menu_icon.display() { if type vpn_menu.py 2>&1 > /dev/null ;then vpn_menu.py -e fi } function vpn.connect(){ vpn.menu_icon.display VPN_NAME=$( vpn.getFullName $1 ) vpn.disconnect "$VPN_NAME" vpn.isConnected "$VPN_NAME" || networksetup -connectpppoeservice "$VPN_NAME" cnt=0 echo "conncting..."; while ! vpn.isConnected "$VPN_NAME" do (( cnt++ )) printf "${cnt} time .waiting...\r" sleep 1 if (( $cnt > 30 )) ; then echo failed. return 1 ; fi done; printf " \r" echo "connected" return 0; } function vpn.addRoute(){ echo add route; for IP_ADDR; do echo ip route add ${IP_ADDR}/32 dev ppp0 ip route add ${IP_ADDR}/32 dev ppp0 done }
sudo -e とは環境変数EDITORを使って、/tmp フォルダにファイルを作ってそれを開いてくれる。 エディタのプロセスを終了したら、元のファイルに上書きされる
vim で開いているときは、 :w
だと反映さません。時々ハマります、 :w を押しても更新が結果に出ない。
sudo -e を使っていると、なんでなんで、とパニックになることがあります。
man sudo を見てみると sudoedit のポイントは次の通り。
長いので抜粋
シンボリックリンクの編集は許可しない セキュリティポリシーによって指定されたエディタを起動して、 テンポラリファイルを編集する。 編集対象のファイルのコピーをテンポラリファイルとして作成する。 編集作業がすむと、テンポラリファイルをオリジナルのファイルにコピーして、 テンポラリファイルを消去する。 sudoers ポリシーでは、環境変数 SUDO_EDITOR,VISUAL, EDITOR を (この順番で) 使用する。 -e でエディタが実行されるときは、sudo を起動したユーザの環境が、 変更を受けずに使われる。
sudo -e は不意な変更や途中でいったん保存したときに影響が出来ないよう
vim の設定をそのまま引き継ぎたいなら、次のような代替手段がある。
sudo -E vim sudo -E $EDITOR
sudo vim するよりも、記述途中でファイルをいったん保存できるので、sudo -e のほうが好きです。
でも、終了しないと反映しないのをわすれてよくトラブります、その点については諦める。
man sudoedit
-e, --edit 何らかのコマンドを実行するのではなく、1 個以上のファイルを編集する。 セキュ リティポリシーの参照では、コマンドのパス名の代わりに "sudoedit" という文字列 が使用される。 セキュリティポリシーによってユーザに権限があることが認められ ると、 次のことが順番に行われる。
1. 編集対象のファイルのコピーをテンポラリファイルとして作成する。 テン ポラリファイルのオーナーは sudo を起動したユーザである。 2. セキュリティポリシーによって指定されたエディタを起動して、 テンポラ リファイルを編集する。sudoers ポリシーでは、環境変数 SUDO_EDITOR, VISUAL, EDITOR を (この順番で) 使用する。 SUDO_EDITOR, VISUAL, EDITOR のどれも設定されていない場合は、 sudoers(5) の editor オプ ションにリストされたプログラムのうち、 最初のものが使われる。 3. 編集作業がすむと、テンポラリファイルをオリジナルのファイルにコピー して、 テンポラリファイルを消去する。 編集する権限のないファイルを編集できないようにするため、 セキュリティポリ シーによって明示的に許可されていないかぎり、 以下の制限が行われる。 · シンボリックリンクの編集は許可しない (バージョン 1.8.15 以上)。 · sudo を実行するのが root であるときを除いて、 編集する ファイルのパス中にシンボリックリンクがある場合、 そのリ ンクの親ディレクトリが sudo を実行するユーザにとって書き 込み可能ならば、 リンクをたどらない (バージョン 1.8.16 以上)。 · sudo を実行するのが root であるときを除いて、 ファイルが sudo を実行するユーザにとって書き込み可能なディレクトリ にある場合、 そのファイルの編集を許可しない (バージョン 1.8.16 以上)。 ユーザがデバイス・スペシャルファイルの編集を許可されることは絶対にない。 指定されたファイルが存在しない場合は作成する。ここで注意すべきは、 sudo に よって実行されるコマンドの大部分と違って、 -e でエディタが実行されるとき は、sudo を起動したユーザの環境が、 変更を受けずに使われるということだ。 何 らかの理由で sudo が編集した内容でファイルを更新できないときは、 ユーザに警 告を発し、編集した内容をテンポラリファイルに保存することになる。
/usr/bin/xvfb-run を使えば楽ができる。 Xvfb を起動してDISPLAY変数をセットして、DISPLAY変数を渡して別途起動する、というプロセス管理をぱぱっとやってくれるシェルスクリプトです。
実行時に、このようにしてもstderr を捨てることが出来ない。
/usr/bin/xvfb-run /usr/bin/node chrome-cdp-sample.js 2>/dev/null
/usr/bin/xvfb-run:180行付近で渡されたコマンドをXvfb経由で実行されているのですが
# Start the command and save its exit status. set +e DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 RETVAL=$? set -e
なんと、2>&1 してます。まじかよ。
これを、こう
# Start the command and save its exit status. set +e DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" #DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 RETVAL=$? set -e
こうすれば、stderr を取れますね。 なんでこんな事になってるんだろう。意味があるんだろうけど、想像がつかない。