それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

MacのFinderでカットペース(ファイルの移動)をする

Mac のファインダでカットペーストをしたい

コピーペーストはできるんだろうけど、カットペーストはちょっとコツが必要。

option + command + V:移動:クリップボードに配置したファイルを、元の場所から現在の場所に移動します。

コピーして貼り付けるときに、移動して貼り付けになる。 先にカットしないところがポイント。

参考資料

support.apple.com

certbotの更新でCloudflareプラグインを使ってDNSの認証を楽にする

目的と背景

certbotワイルドカードについて

2018 年からCertbotワイルドカード発行が可能になっている。

ワイルドカードを使うことで、サブドメインをまるっとTLS化できて便利。

ワイルドカードの証明書の作り方

ワイルドカードのやりかたは以前書きました。 http://takuya-1st.hatenablog.jp/entry/2018/10/25/163040

前回、作成した証明書から90日くらい経過して、更新が必要になったので、さらなる進化を目指します。

今回やること:DNSのTXT認証の省力化

ワイルドカード証明書の発行には、TXTレコードの書き換えが必要です。

これを各API経由で自動化することができます。

準備するもの

今回は、これに加えDebianのAPTのCertbotと競合しないようにVirtualEnvを使うことにしました。

準備

最新版のCertbotを持ってきます。

git clone https://github.com/certbot/certbot
cd certbot

virtualenv 環境に入ります。

virtualenv certbot-test
source ./certbot-test/bin/activate

もしvirtualenv がない場合は pip でインストールします。 pip install --upgrade pip && pip install virtualenv

わたしは pyenv 環境で作っているのでpyenv コマンドとvirtualenvを使っています。

acme をインストール

cd acme
python setup.py install
cd ..

certbot をインストール

cd certbot
python setup.py install
cd ..

dns プラグインをインストール。今回は cloudflare を採用します。

cd certbot-dns-cloudflare
python setup.py install
cd ..

これで、Certbot側の準備は終了です。

api キーを用意します。

Cloudflareにログインし、プロフィールを表示、Global API Key を閲覧しコピーします。

api キーを保存しました。

/etc/letsencrypt/cloudflareapi.cfg

dns_cloudflare_email =  takuya**************@gmail.com
dns_cloudflare_api_key = *********************

キーが不用意に閲覧されなようパーミッションを設定しておきます。

sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg

これで、APIとキーの準備は終わりです。

起動テストを行います。

mydomain=example.com
sudo /home/takuya/certbot/certbot-test/bin/certbot  \
  certonly \
 -n --dry-run \
 --cert-name $mydomain \
 --dns-cloudflare \
 --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \
 --server https://acme-v02.api.letsencrypt.org/directory \
  -d "*.$mydomain"  \
  -d $mydomain

Certbot を使ってワイルドカード証明書を発行します。

mydomain=example.com
sudo $( which certbot )  \
  certonly \
  --cert-name $mydomain \
  --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \
  --server https://acme-v02.api.letsencrypt.org/directory \
   -d "*.$mydomain" \
   -d $mydomain

最後にWEBサーバーを再起動して終了です

sudo service nginx restart

複数枚を作るときは

次回以降は次のようにすると早いですね

cd ~/certbot
git pull
virtualenv certbot-test
source ./certbot-test/bin/activate
suod ./certbot-test/bin/certbot certonly 

まとめ

ワイルドカード証明書は管理コストが減って便利。

ワイルドカード証明書

こんかいは、Virtualenvを使ったのでsystemd に登録される自動更新のプログラムが使えないので、数ヶ月ごとに手作業で実行する必要はある。

この辺はそのうちAptレポジトリに含まれるCertbotが更新されるであろうから大丈夫だと思う。

ワイルドカードの証明書を使うのもいいけど、自動更新もあるわけだしランダムなドメイン名を無数に使わないなら、ワイルドカードは使わないで、Certbot-autoで自動更新のほうがいいかもしれない。

複数のドメインの証明書を1枚にすると同時にワイルドカードもまとめられたら嬉しい。試してみたい。

2019-03-27

記述追加

参考資料

ipコマンドで、ifconfig down/up やifdown/ifup 的な操作を行う方法

インターフェースのリンクアップとリンクダウン

iproute2 以前なら、何も考えずに、次のようなコマンドを打ち込んでいたところではある。

ifconfig eth0 down &&  ifconfig eth0 up

ip コマンドになって一番困ったのがこれ。

NICを切断と接続をipコマンドでやる

ip link set eth0 down 
ip link set eth0 up

これで、ネットワークのインターフェースを指定した再起動ができます。

省略形も使えます。

ip l set eth0 up

link は l に省略できます。 ip a が ip addr の略なのと同じです。

dhcpを更新したいだけなら

sudo dhclient -v -r eth0

なととしてもいいわけです。

ip コマンド地味に困る

iproute2 で検索したいので、みんなip コマンドじゃなくて iproute2 で記事書いてほしい

nmcli でもいいんだろうけど、あっちはMacのnetworksetup みたいに接続名で識別するからめんどくさそう.

takuya@:~$ nmcli connection show '有線接続 1'
takuya@:~$ nmcli connection down '有線接続 1'
takuya@:~$ nmcli connection up '有線接続 1'

nmcli は更に使いにくいな。。。ifconfig で良かったんじゃ・・・感

参考資料

Linux Force DHCP Client (dhclient) to Renew IP Address - nixCraft

tcpdump で ipv6 のパケットを見る

tcpdump のパケットで、v6だけにフィルタする。

tcpdump -v ip6

ip6 と書きます。 ipv6 だけど、ipv6とは書きません。

ping6のように、tcpdumpipv6 専用コマンド tcpdump6 があるわけででもないです。

ubuntu(gnome3) のキーリピートを変更する

ubuntu のキーリピートが遅い

設定は、アクセシビリティ→ タイピング。(( まぁUbuntuのことだから、 18.04 ではこうだけど、すぐ場所変わるんだろうけど)

ちょっとわかりにくいUIだけど、これで調整する

f:id:takuya_1st:20190108021907p:plain

上部はウエイト

上部は、キーリピートが開始するまでの時間。つまりリピートウエイト

左に行くほど時間間隔が小さい、つまり左ほど早い

下部はリピート間隔

下部は、キーリピートが発生するまでの時間。つまりリピート間隔

左に行くほど時間間隔が小さい、つまり左ほど早い。したがって左に行くほど入力回数が多くリピートが多い

右に行くほど、時間間隔が大きい。つまり右ほど遅い。したがって右に行くほど入力回数が少ないキーリピートが少ない。

わかりにくいUI

左に行くほど大きいと思いがちなので、一瞬混乱する。→に行くほど時間が大きい。

つまり「右=遅い」

f:id:takuya_1st:20190108022837p:plain

ubuntu 18.x なので

たぶんGNOMEのデスクトップでも同様だと思います。

2019-01-17

DebianGnome で確認した。同じでした。

f:id:takuya_1st:20190117152438p:plain

UbuntuのLive CD/DVD/USBで使用中にaptでソフトウェアをインストール

Live DVDで使用中にaptでソフトウェアをインストール

UbuntuインストーラーのUSBディスクで起動して、なにかやりたときにどうするか。

たとえば、SSD/HDDをリカバリしたいとか、ちょっとつかいたときにコマンドがなくて困ったりする。

Ubuntu/Debian などをUSBディスクにインストールしてもっておけばいいんだろうけど、そこまではめんどくさいし、とりあえずDVDやインストールUSB一つで済ませたいよね。

ddrescue がない

ddrescue がUbuntuのインストールメディアには搭載されてないのでそれをインストールしたい。

そうしておけば、HDDのコピーが行なえますよね。

apt install を可能にする。

ターミナルを開いて、universeを有効にしてあげると

sudo add-apt-repository universe

これで準備が完了

たとえばddrescue をいれる。

sudo add-apt-repository universe
sudo apt install gddrescue 

コマンドを覚えておけば、ubuntu のインストールUSBをひとつ作っておくだけで、ちょっとしたメンテ作業も楽なるに違いない。

参考資料

macのソフトウェアをアップロードをCLI(コマンド)から実行する。

ソフトウェアアップデートが必要なんですが、AppStore開くのがめんどくさい

takuya@~$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

そういえば、しばらくソフトウェアの更新をしてないと思いました。でもapt に慣れきった身体には、Mac App Storeを開いて更新するのがめんどくさいんです。

softwareupdateコマンドがあった。

コマンドから出来ないのかなと思って調べてたら、こんなものを見つけた

takuya@~$ softwareupdate -i -r
Software Update Tool

Finding available software

Downloading Safari
Downloading セキュリティアップデート2018-003

AppStoreの表示と一致するので安心。

f:id:takuya_1st:20181213170505p:plain

参考資料

https://stackoverflow.com/questions/34617452/how-to-update-xcode-from-command-line

aria2c でダウンロードの楽をする。

サーバーにごめんなさいしながら使う。aria2c 通称 aria または aria2

aria2c で同時多重ダウンロードをする。 物理回線以上には早くならないけど、回線の限界まで速度を上げる。

私は、単なるダウンローダー代わりに使っている

ダウンローダートして使う。

なにもオプションつけないと、単なる curl -LJO と同じ。

takuya@Desktop$ aria2c  https://example.com/out.50MB.img

12/06 16:38:14 [NOTICE] Downloading 1 item(s)

12/06 16:38:15 [NOTICE] Allocating disk space. Use --file-allocation=none to disable it. See --file-allocation option in man page for more details.
[#378d63 5.9MiB/50MiB(11%) CN:1 DL:167KiB ETA:4m28s]

適当にレジュームできる機能が好き

Ctrl-C で接続を止めたり、不意に再起動しちゃったりとかの場合でも、「同じマンドを再度実行すると、レジュームされる。

Status Legend:
(INPR):download in-progress.

aria2 will resume download if the transfer is restarted.
If there are any errors, then see the log file. See '-l' option in help/man page for details.

TCP セッションを2本でダウンロード

takuya@Desktop$ aria2c  -x2 https://example.com/out.50MB.img

2本でダウンロードするので1本より早くなる。

速度は期待しないほうがいいかも

TCPの帯域を専有すると少し早くなりますね。かといって、本数を大きくしすぎると却って遅くなる気がする。

企業が展開するミラーサーバとかCDNとか強いサーバー相手なら遠慮なく言ってもいいと思うけど、ボランタリーベースで行われてるサーバーに深かけるの良くない。

インストール

sudo apt install aria2

2019-08-27

追記

参考資料

次世代ダウンロードツールAria2とWEB-UIのセットアップ - Qiita

日常から使えるUnix系OS業務効率up技 - Qiita

ip コマンドで IPv6のアドレスだけを表示する

ip コマンド で v6 のアドレスだけに搾って表示

v6のIPアドレスだけを見たい時がある。ipアドレスをズラズラっと表示されるとめんどくさいので。

 ip -6 addr show br0   # v6 のみ

以前まとめたけど忘れてたので、再度メモ

以前のエントリ

IPv6 での定番ネットワークコマンド(dig/nmap/curl/ip) - それマグで!

apt パッケージ名のnox の意味について

apt search していると、時々見かける nox の意味は何なの?

たとえば、次のようなパッケージに使われている。

apt install vlc-nox
apt install vim-nox

このように、nox と付くものがある。このsuffix(接尾子)は何の意味があるのか。

nox とは

nox とは no require X の略である。

なるほど

つまり、 X window を必要としないCLIでコマンドで動作するものですね。

参考資料

What is vlc-nox? - Ask Ubuntu

ext4 のファイルシステムを拡張して確認する。

ext4 の容量を拡張する

raspi などで resize して expand file system と書かれているアレ

gdisk で容量拡張

sudo gdisk /dev/whatyouwant

resize2fs で容量拡張した部分へextを拡張

sudo gdisk /dev/whatyouwant

情報を更新

sudo partprobe

結果を確認

lsblk

partprobeしないと反映されない。

この辺はよくわかってないけど、lsblk で確認する情報は、partprobeを回さないと、更新されない。

関連資料

vimで特定のファイルタイプのときだけ、カラーテーマ決められる

Pythonとtwilightが相性が悪い

f:id:takuya_1st:20181126171021p:plain

python のファイルをvim で編集しようとしていたら、すごく読みづらい。 カラーテーマが原因ですが、カラーテーマをpythonのためだけにぜんぶを変えるのもめんどくさい。

python ファイルだけカラーテーマを変えたい。

python のときだけ、他の言語と違う設定が必要。インデントや補完などpython は他の言語の設定と共通だと問題が多い。

vim を特定種類のファイルだけ設定を変えることが出来ないか。

ftplugin でできる。

vim には ftplugin ( file type plugin ) がビルトインされているのでソレを使うと簡単に設定ができる.

使い方

ファイルを作る。

mkdir -p  .vim/ftplugin/
vim .vim/ftplugin/python.vim

このときに、python.vim としたらpython だけに適用される設定ファイルが書ける。

.vim/ftplugin/python.vim

color elford
set expandtab
set autoindent

インデントとかをpython に合わせて書くことにする。

うん、見やすい。 f:id:takuya_1st:20181126171651p:plain

ファイル・タイプの確認方法

vim で ft を見るときは、なにも値をセットせずに set すると現在の設定がecho される。

:set ft

参考資料

nvim/vim をコンフィグなし( vimrc を読みしない)で起動する

設定をなしで起動したい。

素のvim を起動したいとき

vim -u /dev/null

なんでもいいから、ファイル名を指定したらいいよね。

vim / neovim の場合も同じ

vim -u NONE
nvim -u NONE

これは、ファイルを指定してるだけなので、

nvim -u /dev/null

などとしたり、空っぽのファイルを読み込んだりしても同じことが得られる

空っぽの新規設定ファイルを使う。

touch a 
nvim -u a

空ファイルを使うテクニック

新規ファイルや空ファイルなど、別の設定ファイルを使うテクニックは vim だけじゃなく curl などひろくコマンド一般で使えるテクニックですよね。知っておきたい老人の知恵ですね。

headless chrome を使うために、Linuxに最新版のChromeを常に入れておく

headless chrome のためDebian/Ubuntuに最新版のChromeを突っ込む。

最新版のChromeGoogle の配付サイトに用意されている。

f:id:takuya_1st:20181126162746p:plain

配付サイトのapt 鍵をいれる。

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo apt update 

手作業でapt に source add する

もし、手作業でAPTのURLをいれるとき( /etc/apt/sources.list.d/google-chrome.list )を更新するか新規作成する。

echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' > /etc/apt/sources.list.d/dl.google.com.list

 編集後に更新

apt update 

 最新版や ベータ版・開発版をいれる。

apt search google-chrome-beta
apt search google-chrome-unstable

  実際にやってみた例

takuya@~$ apt search google-chrom
Sorting... Done
Full Text Search... Done
google-chrome-beta/stable 69.0.3497.57-1 amd64
  The web browser from Google

google-chrome-stable/stable 68.0.3440.106-1 amd64
  The web browser from Google

google-chrome-unstable/stable 70.0.3534.4-1 amd64
  The web browser from Google

細かい違いを確認してみた

takuya@sakura:~$ apt show  google-chrome-unstable
Package: google-chrome-unstable
Version: 70.0.3534.4-1
Priority: optional
Section: web
Maintainer: Chrome Linux Team <chromium-dev@chromium.org>
Installed-Size: 204 MB
Provides: www-browser
Pre-Depends: dpkg (>= 1.14.0)
Depends: ca-certificates, fonts-liberation, libappindicator3-1, libasound2 (>= 1.0.16), libatk-bridge2.0-0 (>= 2.5.3), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.16), libcairo2 (>= 1.6.0), libcups2 (>= 1.4.0), libdbus-1-3 (>= 1.1.4), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk-3-0 (>= 3.9.10), libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.22), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libstdc++6 (>= 4.6), libuuid1 (>= 2.16), libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1, libxtst6, lsb-release, wget, xdg-utils (>= 1.0.2)
Recommends: libu2f-udev
Download-Size: 57.1 MB
APT-Sources: http://dl.google.com/linux/chrome/deb stable/main amd64 Packages
Description: The web browser from Google
 Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.

ヘッドレスを使う場合

ヘッドレスを使うためには。、いくつかのパッケージをいれる必要がある。

sudo apt-get install -y libappindicator1 fonts-liberation

headless-chrome は、xvfb にくらべて必要なモジュールも減ってるしすごく楽だよね。

フォントがない

headless chromeを使ってスクショをとるなら、フォントを持っていたほうがいい。

使ってみてわかったけど、フォントがないとスクショ取ると期待通りにならない。

sudo apt-get install msttcorefonts

apt がHTTPだからダメ・・・?

この記事を書くために幾つかブログを見てたんだけど。

apt のソースが HTTP なのでセキュリティ的にやばい

などと嘘を書いているブログが散見されました。

apt-key で最初に「鍵」を登録しているので、HTTP通信で転送されたとして署名検証つまり改竄は検出できます。*1

HTTPSじゃないとセキュリティ基準が満たせない。

とかいてた人がいて、ちょっと何言ってるわからない。

けど、HTTPSも一応あるらしい。

HTTPはセキュリティ基準を満たせないとか、それでセキュリティを語れるんだと疑問を投げかけたいが人のブロクなので自重した。

そもそもapt-keyで何のために最初にキーを取得してんだろう。ほんの少し考えてほしかった。

https://dl-ssl.google.com/linux/chrome/deb/

杓子定規にセキュリティ基準を「満たせばいい」というのはどうなんだろうね。セキュリティ基準としても、ルールを守る側としても、どちらも思考停止していてるように感じた。

HTTPSで通信されちゃうと、何をインストールしてるか追跡不能になって、むしろめんどくさいと思うんだけど・・・

参考資料

*1:この記述で理解できないひとはこの業界を引退したほうがいい

npm -g で グローバルじゃなくてユーザー空間を使う

目次

npm -g install のインストール先

npm を入れた状況や入れ方にもよるんですけど、npm って ユーザーローカルなどを使えないよね。

まぁグローバルだから、当たり前と言われれば当たり前です。

takuya@~$ npm config --global  get prefix
/usr/local

わたしのmacOS の場合は /usr/local/ でした。

Linuxで、例えばグローバルに入れている場合。

curl -L https://npmjs.org/install.sh | sudo sh

npm -g で グローバルはめんどくさいですよ

いまどき、Linux のFHSに従って /usr/lib とか /usr/local/lib にいれる必要ってある?

macOS は ユーザー空間のホームディレクトリ空間で良くないか。

npm の 設定を確認する。

現在の設定を確認するには、これを使う。

npm config --global  list

デフォルト設定を含めてすべて表示するときは、次のようにする。

npm config ls -l

このコマンドを見ると、次のようなおもしろそうな、ファイル名も見つかる。

prefix = "/usr/local"
cache = "/Users/takuya/.npm"
globalconfig = "/usr/local/etc/npmrc"
globalignorefile = "/usr/local/etc/npmignore"
init-module = "/Users/takuya/.npm-init.js"
userconfig = "/Users/takuya/.npmrc"

グローバルとローカル

npm には グローバルとローカルがあり、ローカルはフォルダごとに、グローバルはシステム全体。

システム全体をどう定義するか難しいところではあるが、「グローバル=ユーザー個人空間」と解釈して利用するほうがより現代的じゃないかなと感じた。

インストール先を変更する

npm config set prefix

インストール先を変更するとができるのでそれを使うことにする。

自分のホームディレクトリに突っ込むことにする。

わたしは、rubyのrbenv の gems を ~/.lib/ruby に突っ込んでいるので、そこを使うことにする。

npm config set prefix $( echo  ~/.lib/node )

または、先程の config ls -l の結果に見える npmrc を使って

NPM_PREFIX=$( echo  ~/.lib/node )
echo "prefix = $NPM_PREFIX" >> ~/.npmrc

などとしても良さそう。

設定した結果はこんな感じになりました。

takuya@Desktop$ npm config --global get prefix
/Users/takuya/.lib/node

変えたあとに知っておく必要があること

node コマンドが node_module をどこから探すかを知っておく必要がある。 Modules: CommonJS modules | Node.js v21.0.0 Documentation

node コマンドを起動したときに次の場所から探すようになっている。

  1. $HOME/.node_modules
  2. $HOME/.node_libraries
  3. $PREFIX/lib/node

つまり、 シンボリックリンクなどでぱぱっとやることで、npm コマンドだけでなく、 node コマンドからも簡単に変えることができる。

ln -sr  ~/.lib/node/lib/node_modules/  ~/.node_modules

グローバル・インストールを変更する利点

なぜグローバルのインストールを変えたほうがいいのでしょうか。

わたしは、sudoなどの権限管理とユーザー単位の管理が楽だからやりました。

パスワードを聞かれるのは不便だし、パーミッションの管理もめんどくさいのです。

/usr/lib のグローバルでのライブラリの共有は確かに便利だしディスクの容量節約になります。でも現代に置いてはDLL地獄にあるような、ライブラリの依存関係プロパティの地獄を味わうだけです。docker や openVZ のchrootアプローチも同じようなものです。

勘違いしそうになるポイント

~/.npm はただのキャッシュ

~/.npm にnode_modulesがたくさんあります。それを見ると~/.npmにインストールされるように見えてしまいます。しかし .npm はキャッシュでそこにファイルはそのまま使うことはないようです。これの根拠は初期設定を見るとわかりました。

初期設定が次の箇所になっていました、

prefix = "/usr/local"
cache = "/Users/takuya/.npm"

上は、私の設定場合です。設定を解釈すると、globalの npm のライブラリは /usr/local/node_modules にインストールされます。 ~/.npm はキャッシュですね。

つまり、"/Users/takuya/.npm" にあるファイルはキャッシュです。ローカルインストール時に使われるようです。 私の npm i コマンドの実行時に取得した npm をキャッシュ保存していて、ここからローカルに配置するようです。開発ディレクトリを含むローカルインストールの高速化と負荷低減のためでしょうか、

この設定を使うべきポイント

windows です Windowsで npm を使うときです。今回紹介した設定を使ってフォルダを移動させる手法は、Windowsでとても役に立つのです。

nvm は prefix を使えない。

nvm を利用しているときは、prefix を利用していると、nvm が使えないので、nvm を使おうとすると怒られます。

2019-12-02 追記

nvm のときの注意点

参考資料

2018-12-08

パスの記述を修正