らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Ubuntu 20.10 で固定アドレスを設定する簡易スクリプト

Ubuntu 20.10 用に、簡単な固定アドレス設定スクリプトを作成したのでメモしておきます。 作り込みの要素は多々あると思います。

実行例

「IP アドレスは 10.0.0.1 に」「ゲートウェイは 10.0.0.254 に」設定する実行例は以下です。 当初は PyYAML を使っていたのですが、大した処理をしていないので PyYAML を使うのは止めました。

chaddr -a 10.0.0.1 -g 10.0.0.254

スクリプト

#!/usr/bin/env python
import argparse
import subprocess
import textwrap

parser = argparse.ArgumentParser()
parser.add_argument('-a', '--address', required=True)
parser.add_argument('-g', '--gateway', required=True)
args = parser.parse_args()

hostname = args.address.replace('.', '-')
subprocess.call('hostnamectl set-hostname ' + hostname, shell=True)

netplan = textwrap.dedent('''
network:
  ethernets:
    ens160:
      dhcp4: false
      dhcp6: false
      addresses: [{arg1}/24]
      gateway4: {arg2}
      nameservers:
        addresses: [1.1.1.1, 1.0.0.1]
  version: 2
''').format(arg1=args.address, arg2=args.gateway).strip()

with open('/etc/netplan/99_config.yaml', 'w') as f:
    f.write(netplan)

hosts = textwrap.dedent('''
127.0.0.1 localhost {arg1}
127.0.1.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet {arg1}
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
''').format(arg1=hostname).strip()

with open('/etc/hosts', 'w') as f:
    f.write(hosts)