alienでrpmをdebに変換

rpmでバイナリしか提供されてないツールをUbuntuにインストールしかったのでメモ。

alien で変換可能。
まずはaptでインストール。

sudo apt install -y alien

rpmをalienで変換して、dpkgでインストールすればOK.

sudo alien hoge.rpm
sudo dpkg -i hoge.deb

これで助かった。

digコマンドで逆引き

digでIPアドレスからホスト名を逆引きしたかったのでメモ。

digに -x オプションをつければOK.

dig -x 203.0.113.1

または、IPアドレスを逆に並べて .in-addr.arpa を末尾につけるという方法もあるけどメンドクサイ。

dig 1.113.0.203.in-addr.arpa

-x でいいや

Ubuntu 19.10: Docker を使う

Ubuntu 19.10にDockerをインストールしたのでメモ。

Dockerのインストール

参考にしたサイトはここ。
How To Install and Use Docker on Ubuntu 18.04 | DigitalOcean

まずは必要なものをaptで入れる。

sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

それからレポジトリを追加して、docker-ceをインストール。
19.10なのでeoan.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu eoan stable"
sudo apt update
sudo apt install docker-ce

コンテナの実行

インストール出来たので、試しに公式のubuntuイメージをダウンロードしてDockerで実行する。

sudo docker pull ubuntu

ダウンロードしたイメージを実行。

sudo docker run -itd ubuntu

シェルに入りたい場合は、psでコンテナID/コンテナ名を調べてattachする。

sudo docker ps -l
CONTAINER ID    IMAGE       COMMAND     CREATED             STATUS                      PORTS   NAMES
34567890abcd    ubuntu      "/bin/bash" 18 minutes ago      Exited (0) 4 seconds ago            hardcore_heisenberg

上記の34567890abcdにattach

sudo docker attach 34567890abcd

これでrootログイン出来るので、あとは必要な環境を揃える。
例えばvimをインストールする。

apt install -y vim

コンソールから抜け出たい時は Ctrl+P を押してから Ctrl+Q で出れる。
Ctrl+Dを押すとコンテナが終了してしまうので注意。

コンテナを停止する場合はstop

sudo docker stop 34567890abcd

DockerHubにpush

変更したコンテナイメージをDockerHubにプッシュするにはまずはDockerHubでアカウントを作成しておく。

変更内容をcommit.

sudo docker commit -m 'vim installed' -a 'orenomemo' 34567890abcd orenorepo/myubuntu

ここでorenorepoがDockerHubのレポジトリ名でmyubuntuがイメージ名

ローカルのイメージを確認するにはimages.

sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
oreno_repo/myubuntu   latest              1234567890ab        17 minutes ago      152MB

そしてDockerHubにログイン

sudo docker login -u orenorepo

最後にpush.

sudo docker push orenorepo/myubuntu

CentOS 6.5 に OpenVZ をインストール

LPIC 304の勉強ついでにOpenVZ環境をセットアップしたのでメモ。

CentOS7でやろうとしたら上手く行かなかったのでCentOS6.5を用意。
まずは下記サイトを参考にしてOpenVZをインストールする。

Install And Configure OpenVZ On CentOS | Unixmen

rootで作業する。

wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo
rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ
yum install vzkernel

それから /etc/sysctl.conf を修正。
下記パラメータを変更or追加する。

# /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

続いてSELinuxをオフにするため、/etc/sysconfig/selinux を修正。

# /etc/sysconfig/selinux
SELINUX=disabled

そして関連ツールをインストール

yum install vzctl vzquota ploop

ここまで来たら再起動する。
再起動後にGRUBがデフォルトのOpenVZカーネルを起動する。

コンテナの作成。
CentOS7テンプレートを使う。
これまたrootで作業。

cd /vz/template/cache/
wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz
vzctl create 101 --ostemplate centos-7-x86_64-minimal

ここでいう101はコンテナのID。
以後このIDに対して操作を行う。

コンテナにIPアドレスを振る。
実機と同じネットワークを使う。

vzctl set 101 --ipadd 10.0.2.199 --save

コンテナを起動する。

vzctl start 101

コンテナのシェルに入る。

vzctl enter 101

ここでpasswdコマンドでrootのパスワードを作っておけば、vzctl consoleコマンドでログインも出来る。

vzctl console 101

VZコンテナコンソールから抜け出すには ESC を押してから . (ドット)を押せば抜け出せる。

Ubuntu に LXC をインストール

これまたLPIC 304の勉強でLXCをUbuntu 19.10 にインストールしたのでメモ

まずaptでlxcをインストール

sudo apt install lxc -y

今回はとにかく動かして操作するのが目的なので、sudoでササっとコンテナを作る。

sudo lxc-create -t download -n mycont-1

すると、利用可能なディトリ一覧が出てくる。
今回のコンテナはUbuntu 18.04で作るのでディストリは

ubuntu

リリースは

bionic

アーキテクチャは

amd64

と入力すればOK.

次はコンテナ起動。

sudo lxc-start -n mycont-1 -d

コンテナのシェルに入る。

sudo lxc-attach -n mycont-1

ここでpasswdコマンドを使ってデフォルトユーザーubuntuのパスワードを変えておく。
とでlxc-consoleコマンドでコンソールに入る時に使う。

sudo lxc-console -n mycont-1

これでコンソールに入れる。

コンソールから抜ける場合は Ctrl+AのあとにQを押す

コンテナの停止は

sudo lxc-stop -n mycont-1

CentOS7 で KVM 仮想環境を構築

これまたLPIC304勉強ついでにKVM環境を構築したのでメモ。

まずは下記サイトを参考にして諸々インストール。
インストールしたらlibvirtdを起動。

How to install KVM on CentOS 7 / RHEL 7 Headless Server – nixCraft

yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
systemctl enable libvirtd
systemctl start libvirtd

続いてブリッジ設定を追加。
デフォルトのNICがenp0s3だとして、下記を末尾に追記

# /etc/sysconfig/network-scripts/ifcfg-enp0s3
BRIDGE=br0

そしたら今度は br0のファイルを作成する。
/etc/sysconfig/network-scripts/ifcfg-br0 を下記の内容で作成。

# /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
BOOTPROTO="dhcp"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
ONBOOT="yes"
TYPE="Bridge"
DELAY="0"

ここまで来たらNetworkManagerを再起動してブリッジ設定を有効化する。

systemctl restart NetworkManager

いよいよ仮想マシンを作成。
testvm2という名前でCentOS7を仮想マシンとしてインストールします。

virt-install --connect=qemu:///system \
--name testvm2 \
--virt-type kvm \
--os-type linux \
--os-variant centos7.0 \
--vcpus=2 \
--ram 2048 \
--accelerate \
--hvm \
--disk path=/var/lib/libvirt/images/testvm2.img,size=10,bus=virtio,format=qcow2 \
--nographics -l "https://mirrors.edge.kernel.org/centos/7/os/x86_64/" \
--network bridge=br0,model=virtio \
--extra-args='console=tty0 console=ttyS0,115200n8'

Text インストーラが起動するので、通常通りインストールすればOK。

仮想マシンを起動してコンソールに接続するなら

virsh start testvm2
virsh console testvm2

仮想マシンから元のコンソールに戻る場合は Ctrl + ] で戻れる。

CentOS7 で Xen仮想環境を構築

LPIC 304の勉強ついでにXen環境を作ろうとして中々手間取ったのでメモ。

まずは「Virtualbox上のゲストCentOS7」にxenをインストールする方法。

Virtualboxでハイパーバイザーを使うので、CPU設定で「ネステッドVT-x/AMD-Vを有効化」にチェックを入れる。
CPUコアも4つ割り当てる。

そしてCentOS7を起動してXenを入れる。
下記の記事を参考にしたが、このまんまだとXenのインストールも仮想マシンのインストールもコケるので微修正

Getting started with Xen Virtualization On CentOS 7.x | Computing for Geeks

rootで作業してます。
まずはcentos-release-xen-48をインストール。

yum -y install centos-release-xen-48
yum -y update kernel
yum -y install xen

続いて /etc/default/grub を修正。
dom0のメモリ割当サイズを変更。

# /etc/default/grub
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=2048M,max:4096M cpuinfo com1=115200,8n1 console=com1,tty loglvl=all guest_loglvl=all"

そしてgrubのxen設定の変更を反映したのちに再起動

grub-bootxen.sh
reboot

再起動後、libvirt関連をインストール。
centos-virt-xen-48のレポジトリを使う事。

yum --enablerepo=centos-virt-xen-48 -y install libvirt libvirt-daemon-xen virt-install
systemctl enable libvirtd
systemctl start libvirtd

そして仮想マシンをインストール。
メモリ使用量が少なくて済むCentOS5を入れます。

virt-install -d \
--connect xen:/// \
--name testvm \
--os-type linux \
--vcpus=2  \
--paravirt \
--ram 1024  \
--disk /var/lib/libvirt/images/testvm.img,size=10 \
--nographics -l "http://archive.kernel.org/centos-vault/5.0/os/x86_64/" \
--extra-args="text console=com1 utf8 console=hvc0"

これでCentOS5のインストール画面が出てくるので通常通りインストールすればOK。
起動を確認したら一旦終了。

再び仮想マシンを起動して、仮想マシンのコンソールに接続。

virsh --connect xen:/// start testvm
xl console testvm

Ctrl + ] でDomain0のコンソールに戻れる。

JS Beautifier で JS ファイルを綺麗にする

ターミナルでJSをbeautifyしたかったのでメモ。

インデントが崩れたり難読化されたJSファイルを読みやすくしたい時に使える。

js-beautify – npm

npmでインストール。

sudo npm -g install js-beautify

変換結果が標準出力に出るので別ファイルにリダイレクトする。

js-beautify input.js > output.js 

今までChromeデベロッパーコンソールのpretty-printを使ったり、またはエディタの拡張機能を使ってたんだけどコマンドラインのが便利ね。

VirtualboxゲストOSでSDカードを使う

カーナビ地図をアップデートしようとしたらWindowsかMac必須だったのでVirtualboxを使ったメモ。
USB接続のSDカードリーダーは持っている前提。

Win10環境を用意

Ubuntuとラズパイしか持ってないので、まずはVirtualbox上にWin10をゲストOSとして入れる。
Microsoftがデベロッパー向けにWin10のVMイメージを公開してるのでそれを使う。
無償で90日間利用可能なのでこれで十分。

Virtual Machines – Microsoft Edge Developer

Virtualbox用のzipファイルをダウンロードしたら解凍する。
中に .ova ファイルが入っているので、このファイルをVirtualboxの[ファイル]>[仮想アプライアンスのインポート]で取り込む。

USBを使えるようにする

こちらのQiitaの記事を参考にして、USBを使えるようにする。

VirtualBoxでのUSBデバイス認識 – Qiita

Extensionパックは入れてたけどvboxusersグループに参加させてなかったわ。

sudo usermod -aG vboxusers ユーザー

このあとUSBデバイスフィルターでSDカードリーダーを追加。
それから一旦カードリーダーを取り外した状態でWin10を起動。
※つなげたまま起動してもUSBデバイス認識に失敗する。

OS起動後にUSBつなげたらゲストOS上でSDカードを認識。
それからカーナビの地図データダウンローダーを実行して、無事地図更新用SDカードを作成出来た。

GCE:Postfix+SendGridでメール送信

家のメル鯖をロリポからGCPに移設したのでメモ

まずはCompute Engineでf1-microマシンを立てる。
OSはいつものUbuntu 18.04

セットアップ

まずはPostfix+Dovecotをインストール。

手順はこちらを参考。
Ubuntu 18.04 LTS : Postfix : インストール : Server World
上記サイトの手順を参考にしてPostfix、Dovecot、SSL/TLSの設定までやっておく。

certbotの更新時にサービスを再起動するようにcron設定を変える。
末尾に –deploy-hookオプションを追加。

#/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --deploy-hook "systemctl restart postfix dovecot"

そしてGCPのVPC Firewall設定で、Postfix+Dovecotが動いてるVMのインスタンスに対して使用するポートを穴あけしておく事。
今回の設定だと最低限インバウンドで tcp 25, 465, 995など必要なものをあける。

header_checks設定を有効化

ついでにheader_checksの設定を有効にして怪しい添付ファイル付きのメールをブロックする設定を追加。

# /etc/postfix/main.cf
header_checks = regexp:/etc/postfix/header_checks

そして header_checks ファイルを作成して保存。
ルールに一致したメールは全て DISCARD で破棄。

# /etc/postfix/header_checks
/^X-Mailer:.*PostMaster General/ DISCARD
/name=.*\.scr/ DISCARD
/name=.*\.exe/ DISCARD
/name=\".*\.inf\"/ DISCARD
/name=\".*\.scr\"/ DISCARD
/name=\".*\.pif\"/ DISCARD
/name=\".*\.bat\"/ DISCARD
/name=\".*\.dll\"/ DISCARD
/name=\".*\.vbs\"/ DISCARD
/name=\".*\.reg\"/ DISCARD
/^Return-Path:.*<#.*@.*>/ DISCARD
/^From:.*<#.*@.*>/ DISCARD

header_checksファイルを作成後、postmapでheader_checks.dbを作成。

sudo postmap /etc/postfix/header_checks

SendGridへのリレー設定

GCEはOP25BによってVPCネットワーク外部へのtcp25番接続が出来ない。
外部からGCEインスタンスへのtcp25番接続はVPC Firewall設定を開ければ可能。

というわけでPostfixのrelayhost設定を使ってSendGridの465番ポート経由でメールを送る。

下記を参考にしてSendGridを有効化する。
SendGrid でのメールの送信
リンク先ではtcp2525番を使ってるけど、SSLを使いたいのでtcp465番にした。

# /etc/postfix/main.cf
relayhost = [smtp.sendgrid.net]:465
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
smtp_tls_wrappermode = yes

sasl_passwdは先程のGCPのドキュメントのとおり作成しておく。
そしてpostfix reload で設定をリロード。

DNS設定を変更

忘れずにDNSでVMに対するAレコードと、MXレコードを作成して反映を待つ。

さらに、SendGrid経由だとメールが届かないドメインがちらほら存在するので、SendGridにSPF設定をしておく。

こちらの手順で Sender Authentication をすればOK.
指定されたCNAMEレコードを3件DNSに追加するだけ。
How to set up domain authentication | SendGrid Documentation