xcodeのバージョンの切り替え方

環境変数での例
export DEVELOPER_DIR=/Applications/Xcode-9.4.app/Contents/Developer
確認方法
xcode-select -print-path
その他の方法
sudo xcode-select -s /Applications/Xcode-9.4.app/Contents/Developer
Xcodeは以下からダウンロード可能
https://developer.apple.com/download/more/

Diskのblock, sectorサイズなどの大きさ

/proc/partitionsのblockは、1024B単位
# cat /proc/partitions 
major minor  #blocks  name

   8        0  117220824 sda
   8        1       1024 sda1
   8        2    2097152 sda2
   8        3   16777216 sda3
   8        4   16777216 sda4
   8        5   16777216 sda5
   8        6   64788480 sda6
   8       16 3907018584 sdb
gdiskのsectorは、下記で、青字にしたように表示されているが512B単位が多い
Disk /dev/sda: 234441648 sectors, 111.8 GiB
Model: KINGSTON SV300S3
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 877EDACD-6579-48A8-ACBD-7F4DAC5E7040
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 4973 sectors (2.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  
   2            4096         4198399   2.0 GiB     8300  
   3         4198400        37752831   16.0 GiB    8300  
   4        37752832        71307263   16.0 GiB    8300  
   5        71307264       104861695   16.0 GiB    8200  
   6       104861696       234438655   61.8 GiB    8300

Ubuntuのdebug symbolのレポジトリ設定

以下のサイトに記載
https://wiki.ubuntu.com/Debug%20Symbol%20Packages

LXDでubuntu-coreをインストールする例

lxc launch images:ubuntu-core/16 CONTAINER_NAME

LXDでコンテナごとにuser remapする方法

まず、/etc/subuid, subgidのrootとlxdに大きいマップ範囲を設定しておく。以下の例では300,000から1,000,000,000件のマップ範囲を確保。
lxd:300000:1000000000
root:300000:1000000000
以下は、CONTAINERのmapを40000から始める例。この後、コンテナの再起動が必要。
$ lxc config set CONTAINER security.idmap.isolated true
$ lxc config set CONTAINER security.idmap.base 400000

QEMUのnographicモードでモニタに移行する

モニタ画面への移行

  • Ctrl-a c

すると以下のようなモニタ画面が表示される

QEMU 7.2.0 monitor - type 'help' for more information
(qemu) 

シリアルコンソールへの復帰

モニタへの移行と同じキー操作

実行中に強制終了

  • Ctrl-a x

関連記事

initrdの作り方の例

roofsイメージのあるディレクトリで、次のコマンドを実行
find . | cpio -o -H newc | gzip -c > ../initrd.gz
なお、initramfsでは、/initが最初に実行される

LXDでホストのディレクトリをコンテナにマウントする例

lxc config device add [CONTAINER_NAME] share disk source=[HOST_DIR] path=[CONTAINER_DIR]

QEMUの基本的な使用方法

QEMUは、ハイパーバイザー型の完全仮想化ソフトウェアです。Linuxでは、Virt-Manager経由で利用されることもしばしばあります。 しかし、QEMUの持つ機能を直接使用したり、よりシンプルに利用する場合、QEMUを直接起動するほうが便利です。 この記事では、基本的な起動方法を紹介します。

なお、x86_64アーキテクチャでは、LinuxのKVMという仮想化支援機能を用いて高い実行性能を実現しています。 そのめ、QEMU/KVM、あるいは、単にKVMと呼ばれることもあります。

基本形

QEMUのコマンドラインは、仮想マシンの構成を含むためやや長くなりがち。そのため、以下ではシェルスクリプトとして起動コマンドを記載する例を示す。下記の内容を適当なファイル名(例: launch-qemu.sh)で保存し、実行すればよい。
#!/bin/sh

QEMU=qemu-system-x86_64
DISK_IMAGE=disk1.raw
MEMORY=1024

${QEMU} \
-enable-kvm \
-cpu host \
-m ${MEMORY} \
-drive format=raw,file=${DISK_IMAGE},if=virtio \
-nic user,model=virtio-net-pci
上記の実行により、次のようなWindowが起動する。

ドライブを追加する(SCSI接続のドライブ追加やUSBドライブの接続を含む)

以下の記事を参照

NICをブリッジモードに変更したり、ユーザモードで外部からアクセスする

上記の-nic userは、QEMU内でのNATを行うNICを追加する。 10.0.2.0/24のプライベートアドレスが仮想マシンに割り当てられる。 仮想マシン内から外部へのアクセスは行えるが、以下の制約がある。
  • pingで外部のノードと通信できない
  • 外部ノードから仮想マシンにアクセスできない(例えば、sshやnginxを仮想マシンで起動しても外部からアクセスできない)
これらが問題となるなる場合、ブリッジモードにするか、ユーザモードでポートフォワーディングの設定をする。 設定方法については、以下の記事を参照。

シリアルコンソールで起動する

X11を使っていない場合や、GUIのWindowが不要な場合、-nographicオプションを追加すると、 コマンドを起動した端末をシリアルコンソールにすることができる。
-nographic
nographicモードでシリアルコンソールとなった端末から復帰する方法については以下を参照

カーネルを直接起動する

冒頭のコマンド例では、物理マシンと同じように仮想ドライブ内に格納されているブートローダーが、同じく仮想ドライブ内のLinuxカーネルを起動する。QEMUは、ホストOS上の(仮想ドライブ内にない)Linuxカーネルを直接起動できる。以下に追加するコマンド例を示す。 -appendはカーネルの起動オプションである。
-kernel vmlinuz \
-append root=PARTUUID=a99825a2-e759-4e41-9c4c-b4804d050caa console=ttyS0 \
-initrd initrd.gz

参考

LXDでプロファイルを作成する

作成(ここでPROF_NAMEは任意の名前)
lxc profile create PROF_NAME
一覧表示
lxc profile list
ひとつのプロファイルを表示
lxc profile show PROF_NAME
プロフィールにNICを追加する例
lxc profile device add PROF_NAME eth0 nic nictype=bridged parent=BRIDGE_NAME
プロファイルをコンテナに追加
lxc profile add CONTAINER_NAME PROF_NAME
コンテナのデバイスに調べ方についてはこちらを参照 lxdのコンテナにNICを増設する例

LXDのコンテナにNICを増設する例

以下で、NIC_NAMEはeth1などに適宜変更。parentにはHost上のBridge名を指定
lxc config device add CONTAINER_NAME NIC_NAME nic nictype=bridged parent=br-exp0
構成の確認方法は次のとおり
lxc info CONTAINER_NAME
設定は次のように表示できる。
lxc config show CONTAINER_NAME
--expandedを加えると更に詳細な情報が表示される
lxc config show --expanded CONTAINER_NAME

opensslメモ

概要コマンド(例)
証明書の内容表示openssl x509 -text -in cert.pem
RSA鍵の作成openssl genrsa -out key.pem 2048

ksoftirqdとkworkerの比較

項目SoftirqTaskletWorke Queue
実行ksoftirqdkworker
sleep 不可 不可
同種の並列実行 不可 ?

B-timesなどの予約駐車場について

B-timesを始めとする、1日単位で予約・利用できる駐車場サービスが増えています。出先と駐車場が確保できる安心感と便利さは素晴らしい。当日、車の出し入れが自由な点も経済的で助かる。 一方、これまで利用してきて、留意すべき事項もあると思う。ここでは2つ紹介する。 1つ目は、近くに学校がある場所。スクールゾーンということで通学時間帯に通行が制限されていたり、幼稚園に子供をおくりにした保護者の自転車が路上に止められていて、駐車がものすごくしにくい。というかできずに使用を諦めたこともある(当日キャンセルしても料金は返ってこない) 2つ目は、車室番号の表示が消えかかっているケース。駐車場の中で番号を確かめるために右往左往していると、オーナーなのか、他の契約者なのかに、「関係者ですか?」と質問されてことがある。まあ、相手からするとこちらが不審者なのかもしれないが、少し高圧的で気分を害した。

linuxのCPU使用率(accounting)メモ

tick_handle_periodic()
  tick_periodic()
    update_process_times()
      account_process_tick()
        account_user_time()
        account_system_time()
          account_system_index_time()
        account_idle_time()
調査したカーネルバージョン: 4.17.3

virbr0を削除する

virbr0を削除
virsh net-destroy default 
起動時の作成を抑止
virsh net-autostart default --disable
状態を取得
virsh net-list --all

Ubuntu 18.04のDockerでUser remapを使う

/etc/docker/daemon.jsonに次の記述を加える
{
  "userns-remap": "default"
}
/etc/subuidと/etc/subgidに以下の記述を追加する。 それぞれ、ホストでのUser ID (Group ID)の0-65535が、それぞれ、コンテナ上での100000-165535にマップされる。 100000の部分は、適宜変更してもよい。上記のuserns-remapで指定した値と、下記の一番左側の文字列が対応するが、defaultの場合は、標準のdockremap行の値が使用される。
dockremap:100000:65536
そのあとは、docker daemonを再起動
# systemctl restart docker

topコマンドで便利なキー操作

キー内容
Vツリー状にプロセス表示
Eシステム全体のメモリ量の単位を切り替え
e各プロセスのメモリ量の単位を切り替え
>, <ソートの基準を切り替え
cコマンドの表示幅を切り替え
Hスレッド単位で表示
W現在の表示設定を保存

OpenVPNでINSECUREのWARNINGが出て接続できなくなった時の対処

ある日、マシンを再起動するとOpenVPNがサーバーと接続されてなかった。ログには次の記載があった。
WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
対処方法は、メッセージにある通り、ブロックサイズが128bit以上のcipherを用いること。例えば、以下をサーバーとクライアントのconfigに記載する。
cipher AES-256-GCM
参考
OpenVPNのクライアント用configファイル例

上島珈琲 大門店のネットワーク速度

2018/6/10 8:40ごろの結果。日曜の朝だったからかもしれないが、pingが超早く快適。いまやクラウドなどのサーバにログインしてそちらで開発することが多いのでこれは嬉しい。

また、この大門店には、AC電源も一部の席で利用で来る。ざっと全席の1/4か。


Ubuntu 18.04にZabbixをインストールするためのレポジトリ

ZABBIX SIAの日本語サイトでは、Ubuntu 18.04 (Bionic)用のインストールの説明がなかったが、repo.zabbix.comにはapt設定用のdebがあった。以下のようにインストールできる。
$ wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb
$ sudo dpkg -i zabbix-release_3.4-1+bionic_all.deb 
あとは、aptでzabbix-serverとか、agentとかfront-endをインストールすればよい。それはネットにたくさん情報があるのでggrks。

GitHubに公開鍵を登録していないユーザーにsuして、ssh経由でpushやpull、cloneをする

ここでは、以下の条件でcloneする例を以下に示す。

githubに公開鍵を登録してるユーザー:foo
suするユーザー: root
$ sudo -E su
-Eをする理由はSSH_AUTH_SOCK環境変数を引き継いでssh-agentによる自動パスフレーズ入力をするため。これは必ずしも必須ではない。
あとは、次のような.ssh/configを作成すれば、gitでgithubからcloneするときにfooとして操作が行われる。
Host github.com
  user foo
  identityfile /home/foo/.ssh/id_rsa

Ubuntu 18.04 LTSでのBridgeの設定例

Ubuntu 18.04でNetplanが標準のネットワーク設定ツールになっている。設定ファイルは/etc/netplan/以下。ファイルがなければ、適当な名前のファイルを作成する
network:
    ethernets:
        enp2s0:
            dhcp4: n
    bridges:
        br0:
            interfaces: [enp2s0]
            addresses:
            - 192.168.5.3/24
            gateway4: 192.168.5.1
            nameservers:
                addresses:
                - 192.168.5.1
                search: []
            optional: true
    version: 2
なお、設定を有効にするには次のコマンドを実行
netplan apply

MacOSでdd

1. USBストレージを挿入
2. コマンドラインからdfなどでデバイス名を確認。以下の/dev/disk2s1ように/Volumes以下にマウントされているのがそう。
$ df -h
Filesystem      Size   Used  Avail Capacity iused               ifree %iused  Mounted on
/dev/disk1s1   932Gi  438Gi  490Gi    48% 1108281 9223372036853667526    0%   /
devfs          201Ki  201Ki    0Bi   100%     696                   0  100%   /dev
/dev/disk1s4   932Gi  3.0Gi  490Gi     1%       3 9223372036854775804    0%   /private/var/vm
map -hosts       0Bi    0Bi    0Bi   100%       0                   0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0                   0  100%   /home
/dev/disk2s1   1.7Gi  4.8Mi  1.7Gi     1%     154               57178    0%   /Volumes/CLIPDRIVE
3. これをdiskutilコマンドを使ってアンマウント
$ sudo diskutil umount /Volumes/CLIPDRIVE/
4. 上記のdisk2s1のs1は1つめのパーテーションという意味なので、USBドライブ全体のデバイス名は、この例では/dev/disk2。 これに対してdd。以下の例でのbs=はブロックサイズ(書き込む単位サイズ)を意味する。これをつけないと、書き込みに長い時間を要することがあった。
dd if=ubuntu-18.04-live-server-amd64.iso of=/dev/disk2 bs=65536
12896+0 records in
12896+0 records out
845152256 bytes transferred in 67.845102 secs (12457086 bytes/sec)

Ubuntu 18.04 LTSでのDNSの設定方法

Ubuntu 18.04では、systemd-resolvedが標準で使用されている。 そのためDNSの設定を/etc/systemd/resolved.confに以下のように記載する。
DNS=192.168.10.10

カーネルの障害発生時自動的に再起動するための設定

/etc/sysctl.confに次の設定を記載。最初のkernel.panic=10は10秒後に再起動を行うための設定。
kernel.panic = 10
kernel.panic_on_oops = 1
kernel.panic_on_unrecovered_nmi = 1
kernel.unknown_nmi_panic = 1
kernel.panic_on_io_nmi = 1
kernel.panic_on_warn = 0
kernel.softlockup_panic = 1
kernel.hung_task_panic = 1
kernel.panic_on_stackoverflow = 1
vm.panic_on_oom = 1
有効化するために次のコマンドを実行
$ sudo sysctl -p
参考 http://nopipi.hatenablog.com/entry/2015/05/16/125823

Ubuntuでハイバネートする方法

まず、Swap領域のUUIDを調べる。下記の例では
$ cat /proc/swaps | awk '{print "blkid " $1}' | sh
/dev/dm-3: UUID="64b18146-8243-4406-b859-282f545380ad" TYPE="swap" PARTUUID="88a99aa4-05"
つづいて、/etc/default/grubのGRUB_CMDLINE_LINUX_DEFAULT行にresume=を追加
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=64b18146-8243-4406-b859-282f545380ad"
GRUBをアップデートして再起動します。
$ sudo update-grub
実際にハイバネートするには次のコマンドを実行
$ sudo systemctl hibernate

Ubuntu 18.04, 17.10でのNICの設定例

Netplanを使う。/etc/netplan以下に任意の名前のファイルを設定する。その内容例は以下。
$ cat /etc/netplan/10-eth.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.5.122/24]
      gateway4: 192.168.5.1
      nameservers:
        addresses: [8.8.8.8]
      dhcp6: no
なお、設定を有効にするには、次のように入力
$ sudo netplan apply

systemd-networkdのNIC設定例

$ cat /etc/systemd/network/eth0.network
[Match]
Name=eth0

[Network]
Address=192.168.5.122/24
Gateway=192.168.5.1
DNS=8.8.8.8