Okada Hiroshi の blog

typo が多いです

自宅の Linux サーバーにハードディスクを増設しました。

しばらくぶりに自宅の Linux サーバーにハードディスクを増設したので記録しておきます。

自宅サーバーでそれほど重要なデータでもないので、普通のPC用のハードディスクを増設しました。

ハードディスクの増設は何回もやったことがあるのですが、 最近はGUIで設定してばかりだったので、コマンドラインでやるのは久しぶりです。

増設前の /etc/fstab は以下のようなものでした。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=9a65b311-ec87-47ae-9a45-5d1c0636d912 /               ext4    errors=remount-ro 0       1
# /tmp was on /dev/sdb2 during installation
UUID=5550e624-abfb-49eb-8708-06c7b0df64e6 /tmp            ext4    defaults        0       2
# swap was on /dev/sdb1 during installation
UUID=95b623db-53b0-4bd4-bce3-de3dc817bceb none            swap    sw              0       0

今度増設するドライブは /dev/sdc になります。 GPT ディスクなので フォーマットには gdisk コマンドを使いました。

$ sudo gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o   「新しい空の GUID partition table (GPT) を作成」
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n「新しいパーティションを作成」
Partition number (1-128, default 1): 
First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w 「パーテーションテーブルを書き込んで終了」

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.

hiroshi@hp1:~$ sudo mkfs.ext4 /dev/sdc1 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: 3627b957-fd37-4147-84e4-62ff8400d177
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
$ 

次にファイルシステムを指定してフォーマットします

$ sudo mkfs.ext4 /dev/sdc1 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: 3627b957-fd37-4147-84e4-62ff8400d177
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  
$

lsblk で UUID を確認します

$ lsblk -o NAME,UUID
NAME   UUID
sda    
└─sda1 9a65b311-ec87-47ae-9a45-5d1c0636d912
sdb    
├─sdb1 95b623db-53b0-4bd4-bce3-de3dc817bceb
└─sdb2 5550e624-abfb-49eb-8708-06c7b0df64e6
sdc    
└─sdc1 3627b957-fd37-4147-84e4-62ff8400d177

/etc/fstab に次の行を追記します。

UUID=3627b957-fd37-4147-84e4-62ff8400d177 /srv            ext4    defaults        0       2

$ sudo mount -a でマウントします。

以上でした。

手抜きの人用の favicon ジェネレータを作りました。

昔に比べて、クライアントサイドの JavaScript だけで、かなり色んな事ができるようになったので、手抜きの人(自分とか)用の favicon ジェネレータを作ってみました。

拙速 favicon ジェネレーター

https://hasty-favicon.toycode.com/

文字を入れるだけでとりあえず favicon ができるので、デザインがあまり必要ではい (でもブラウザのタブを沢山開いた時でも区別したいので、最低限の favicon はつけたい) 時には便利ではないでしょうか。

なお、同様のサイトとして Favicon Generator とうのがあります。もう少しこった物が欲しい人はこちらを使った方がよいかもしれません。 (僕はもう歳なので、複数文字だと見づらいのですが)

NISAの5年目の配当金の税金について

NISAで外国株を買って持っているのですが。5年目の配当の課税について気になったので、SBI証券に問い合わせてみたら以下のような回答をもらいました。

NISA口座で保有する外国株式・海外ETFの配当金・分配金は、権利取得時にNISA預りで保有していて、効力発生日(支払開始日)が5年間の非課税期間内であることが条件になります。

例えば、2016年にNISA口座で買付した株式を最終年(2020年の5年目)の12月に権利を獲得し、翌年の3月に受取る配当金は課税されるかと存じます。

つまり5年目の終わりギリギリに売却してその時、配当金を受け取る権利が発生していると、あとで申告しないといけないという事です。(外国税額控除の適用申請) NISA以外の株取引は特定口座でやっているので、株については申告手続きを省略できていたですが、NISAを使っていると (5年以内に売っても) 場合によっては申告の処理をしなくてはいけなくなるというのは意外でした。

プログラムを実行して結果を返す mastodon bot のソースコードを公開しました。

プログラムを実行して結果を返す mastodon bot を作ってみました。 - Okada Hiroshi の blog

を改良して、ソース−コードを公開しました。

HiroshiOkada/hello-bot: A Mastodn bot that run short programs

botの使い方

画像を出力する部分で日本語が上手く表示できなくて修正に時間がかかってしまいましたが、なんとか公開できる状態になったと思います。

対応プログラミング言語も少し増やして 29言語ほどにしました。

拡張子 処理系&言語
.asm NASM
.bc bc
.bf beef(Brainfuck)
.cpp clang++(c++)
.cs mcs/mono(C#)
.c gcc(C)
.dot dot/Graphviz
.f .f90 .f95 gfortran
.go go
.hs ghc
.html phantomjs
java openjdk-9
.js nodejs
.lsp .lisp clisp
.lua lua5.3
.ml ocaml
.php php7
.plt .gnuplot .gpi gnuplot
.py2 python2
.py3 .py python3
.pl perl
.rb ruby
.scm guile(scheme)
.sh .bash bash
.sql sqlite3
.svg inkscape
.ts tsc(TypeScript)
.vim vim
.zsh zsh

プログラムを実行して結果を返す mastodon bot を作ってみました。

せっかく mastodon サーバーを立てたのだから bot を作ってみようと、プログラムを実行して結果を返す mastodon bot を作ってみました。

自分で立てたサーバーなので、負荷を気にせずに実験できるのはメリットの一つです。

今回作ったのは、プログラムを送ると docker コンテナ上で実行して出力を返すという bot です。

例えば、 @hello@mastodon.toycode.com 宛に

@hello@mastodon.toycode.com
hello.cpp
#include <iostream> 
int main()
{
    std::cout << "Hello, World!\n";
}

のようなメンションを toot すると、 Hello, World と帰ってきます。

@hello@mastodon.toycode.com の次の行にあるファイル名の拡張子で、どのプログラム言語かを判定しています。 又、ファイル名を書かずに shebang で始めることもできます。

#!/bin/bash

echo "今日は世界"

頑張って 20言語以上に対応したので、遊んでみて下さい。

なお、 svg, dot言語, gnuplot に対しては画像を返します。

さらにプログラムで out.svgsvg を出力するとその画像を返します。

Mastodn API を叩くための access token を取得するコマンドラインプログラムを node.jsで書きました。

Mastodn API を叩くための OAuth2 の access token を取得する。コマンドコマンドラインツールを node.js で書いてみました。

www.npmjs.com

(途中でブラウザが立ち上がります。)

npm を公開するにのは初めてだったので、数日かかってしましましたが、これで bot を作るのが楽になったと思います。

なお、 mastodon の場合

config/initializers/doorkeeper.rb

# Access token expiration time (default 2 hours).
# If you want to disable expiration, set this to nil.
 access_token_expires_in nil

となっているので、 access_token の更新はしなくても良いようです。

mastodonインスタンスを VPS から自作サーバーに引っ越しました

今まで mastodon インスタンス toycode -- Mastodon を の OVHとうい会社のVPS で運営してきましたが、結構ディスクをやメモリを食うので、自宅サーバーに引っ越すことにしました。

事前準備(VPS側)

  • 自宅サーバーに ubuntu16.04 と Docker, docker-compose 等の必要なソフトをインストールしました。
  • VPS から 自宅サーバに切り替えた時に DNS の変更が早く反映されるように TTL を 60 にしました、また VPS のホストを切替後も参照できるように old という名前を追加しました。DNSAmazon Route 53 を使っているので、比較的作業は簡単でした。

事前準備(自宅側)

  • NVR500でdns static a mastodon.toycode.com 192.168.100.200 ttl=120と入力し、自宅内からアクセスした時はLANのアドレスを返すようにしました。

停止

  • 僕以外、ほとんど使っている人はいないと思いますが、一応「止めますよ」と toot してから5分ほど待って docker-compose down でインスタンスを止めました。
  • インスタンスを停止したので、Amazon Route 53 で DNS のレコードを編集して、 mastodon.toycode.com が自宅を指すようにしました。

データの移行完了と起動

VPS 側で、パーミッション等の設定をした後、もう一度 rsync で残りのデータをコピーしました、事前に殆どのデータをコピーしていたので、*(1分以内** でコピーが終わりました。 docker-compose up -d で起動し、自宅内のパソコンと(LAN内)、WiFiを切った状態のスマートフォン(外からのアクセス)で動作しているのを確認しました。