ConoHaにLinuxからsftpでISOimageをアップロードする

ConoHaを利用する際、使いたいOSのイメージが用意されていなかったり、自分で用意したい場合のやり方。

事前準備

インストールしたいOSのイメージを用意する

SSHの設定

ConoHaのコンパネを開き、コンソールの画面を開くと、下の方に "SSH Private Key" というのがあるので、クリックして秘密鍵をダウンロード。

ダウンロードしたら秘密鍵の場所とパーミッションを変更する。

# mv [秘密鍵] ~/.ssh/
# chmod 600 [秘密鍵]

イメージのアップロード

さっき "SSH Private Key" をダウンロードした場所に書いてある、 "ISOイメージアップロード(SFTP)" の接続先とユーザ名を確認する。

コンソールから

# sftp -o IdentityFile=[秘密鍵のパス] [ユーザ名]@[接続先]:images/
> Connected to sftp1001.cnode.jp.
> Changing to: /images/
sftp> put [ISOイメージ]
> Uploading Linux.iso to /images/Linux.iso
> Linux.iso
sftp> exit

これでアップロードができる。
あとはコンパネからOS再インストールを選択すると、インストール元から今回アップロードしたイメージが選択できる。

参考

ConoHaのブログ

ConoHaにArchLinuxをインストールした時の手順

最近VPS上のArchLinuxを再インストールしたのでその手順をまとめてみました。

環境

  • OS : ArchLinux64bit(自分でアップロードしたISOイメージ)
  • VPS : ConoHa
  • プラン : メモリ2Gのやつ

VPSの作成とインストールイメージの用意

VPSを作成する

  • 最初にVPSを作成するときはCentOSしか選べないはずなので、とりあえず適当にVPSをひとつ作ります。

今回使用するArchのインストールイメージについて

  • 作成した後、OSの再インストールを開くと、ConoHaで用意されているArchLinuxのインストールイメージがあるのですが、今回は自分でインストールイメージを用意します。
  • ArchLinuxのイメージを用意する方法は2つあります(今考えた)。
    • 自分で落としてきてConoHaにアップロード
    • いま作成したVPSにイメージをDLしてそこからConoHaにアップロード
  • 今回は現在使用しているネット回線が通信速度絶賛規制中なので今作成したVPSにDLしてConoHaにアップロードする方法でいきます。

ArchLinuxのイメージを用意する

インストールイメージのダウンロード
  1. ConoHaのコンパネからコンソールを開くと、下の方に"SSH Private Key"というのがあるのでクリックして秘密鍵をダウンロードします。
  2. 今DLした秘密鍵の場所とパーミッションを変更します。
local# mv [秘密鍵] ~/.ssh/
local# chmod 600 [秘密鍵]
  1. SSHでログイン
    local# ssh -i./ssh/[秘密鍵] root@X.X.X.X
  2. 適当な場所にwgetでイメージをDLします。
    cent# wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2015.06.01/archlinux-2015.06.01-dual.iso
  3. DLが完了したらcent# sha1sum archlinux-2015.06.01-dual.isoでハッシュを確認します。
インストールイメージのアップロード

今ダウンロードしたインストールイメージをConoHaにアップロードします。

  1. VPS上からConoHaにアップロードできるように、さっきDLした秘密鍵をCentOS上にscpする。
    local# scp ~/.ssh/[秘密鍵] root@X.X.X.X:.ssh/
  2. ConoHaのコンパネで "OS再インストール" を選択し、ページの一番下にある "ISOイメージアップロード(SFTP)" から "接続先&ユーザ名" を確認する。
  3. sftpでインストールイメージをアップロードするためのサーバに接続し、イメージをアップロード
cent# sftp -o IdentityFile=[秘密鍵のパス] [ユーザ名]@[接続先]:images/
> Connected to sftp1001.cnode.jp.
> Changing to: /images/
sftp> put archlinux-2015.06.01-dual.iso
> Uploading archlinux-2015.06.01-dual.iso to /images/archlinux-2015.06.01-dual.iso
> archlinux-2015.06.01-dual.iso
sftp> exit

Archのインストールディスクを起動する

  1. "OS再インストール" を選択。
  2. "インストール元" でアップロード済みISOイメージを選択。
  3. "テンプレートイメージ" からさっきアップロードしたISOイメージを選択する。
  4. Archの場合 "Virtio" が使えないので "OFF" にする。

    FreeBSD、ArchLinuxはVirtioをOFFにしてください。 ONの場合はVirtioドライバーがないため、デバイスを認識できずにインストールが途中で止まってしまいます。

    だそうです。

  5. "ビデオデバイス" はGUIを使用する場合は "vmvga" にする。 あと処理速度も "vmvga" のほうが高いらしい。 前回 "vmvga" でArchも動いたのでそっちを使用する。 詳しい違いはここを参考
  6. "ディスク構成" は分ける必要も無いかなと思うので "カスタム" で片方を200GBに指定して一つにまとめてしまいます。
  7. 変更を確定し、VPSを起動させる。

ドライブの準備

パーティションの準備

今回はrootディレクトリ一つとswapの2つのパーティションを作成たいと思います。
(bootパーティションとか分けてもいいけど正直そこまでしなくてもいい気がする。)

rootパーティションの作成

fdiskを使用してパーティションを作成します。

archiso# fdisk /dev/sda
archiso# Command (m for help): o ("o"を入力でパーティションテーブルの作成)
> Created a new DOS disklabel with disk identifier XXXXXXXXXX.
archiso# Command (m for help): n ("n"を入力で新しいパーティションテーブルを作成)
> Partition type
>  p  primary (0 primary, 0 extended, 4 free)
>  e  extended
archiso# Select (default p): (パーティションのタイプを選ぶ。何もせずにEnter)
> Using default response p.
archiso# Partition numver (1-4, default 1): (作成するパーティションのナンバーを入力。1を入力してEnter)
archiso#Firest sector (2048-XXXXXXX, default 2048):` (何も入力せずにEnter)
archiso#Last sector, +sectors or +size{K,M,G,T,P} (2048-XXXX,default XXXX) : +190G
今回HDDは200GB。SWAPを適当に10GBぐらいで作ろうと思うので単純計算+190Gにしときました。
> Created a new partition 1 of type 'Linux' and of size 190 GiB.
swapパーティションの作成

今のと同じ手順でSWAP用のパーティションを作成していきます。

archiso# Command (m for help): n
後はすべてEnter
> Created a new partition 2 of type 'Linux' and of size 10GiB
上手く10GB分作れてた。
archiso# Command (m for help): w ("w"で変更をディスクに書き込んで終了!)  
> The partition table has been altered.
> Calling ioctl() to re-read partition table.
> Syncing disks.
  • wで書き込んだ時に、Re-reading the partition table failed.: Device or resource busyと怒られた場合、
    lsblkした時に、前回のパーティション構成が表示されてしまっていますが、再起動すると適応されるはずです。
    気になる人は再起動してからやり直してもいいかも(私はやり直しました)

ちゃんとパーティションが作成されているか確認。

archiso# lsblk
sda    200G
|-sda1 190G
|-sda2  10G

ファイルシステムの作成

archiso# mkfs.ext4 /dev/sda1
archiso> proceed anyway? (y,n)と聞かれたらyと応える
そしてswapの作成
archiso# mkswap /dev/sda2
swaponするのを忘れないように!
archiso# swapon /dev/sda2
ちゃんとファイルシステムが作成されているか確認

archiso# lsblk -f
sda
|-sda1 ext4
|-sda2 swap

パーティションのマウント

archiso# mount /dev/sda1 /mnt
今回パーティションは"/dev/sda1"しか作成していないのでこれだけ

インストール

一応ネットワークにつながっているか確認する
archiso# ping archlinux.org

ミラーリストの選択

"mirrorlist"を編集して日本のサーバを1番上に持ってきます。 インストールした時にこの設定が引き継がれるっぽいです。
archiso# vi /etc/pacman.d/mirrorlist .jpのサーバが2つあるはずなのでヤングして1番上に持ってきます。 保存して終了

ベースシステムのインストール

ベースシステムのインストールを行います。
archiso# pacstrap /mnt base base-devel
ここで、引数のbasebase-devel以外にインストールしたいパッケージを指定すると一緒にインストールしてくれます。
こんな感じ archiso# pacstrap /mnt base base-devel vim zsh grml-zsh-config openssh

fstabの生成

fstabを作成します。これがないと起動出来ないので注意。
archiso# genfstab -U -p /mnt >> /mnt/etc/fstab
一応確認

archiso# cat /mnt/etc/fstab
> # /dev/sda1
> UUID=XXX / ext4 rw,relatime,data=ordered 0 1
> # /dev/sda2
> UUID=XXX none swap defaults 0 0

ちゃんと作れてました。

Chrootとベースシステムの設定

今インストールしたArchLinuxにChrootでログインして色々と設定します。
archiso# arch-chroot /mnt /bin/bash

ロケール

ロケールの設定をする

locale.genを編集
chroot# vi /etc/locale.gen
 en_US.UTF-8 UTF-8
 ja_JP.UTF-8 UTF-8

行の最初の"#" を削除

localeを生成

chroot# locale-gen

locale.confの編集

chroot# echo LANG=en_US.UTF-8 > /etc/locale.conf
chroot# export LANG=en_US.UTF-8

タイムゾーン

日本のタイムゾーンを設定
chroot# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ハードウェアクロック

Archにはデフォルトで時刻合わせのためのデーモン等が入っていません。
ntpかsystemdで設定してあげる必要があります。
今回はsystemdで設定したいと思います。

chroot# vi /etc/systemd/timesyncd.conf (2行追加)
    NTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
    FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 0.jp.pool.ntp.org

chroot# timedatectl set-ntp true
chroot# date (正しい時間か確認)
chroot# hwclock --systohc --utc

ホストネーム

かっちょいいホストネームをつけます
chroot# echo [かっちょいいホストネーム] > /etc/hostname
同じホスト名を"/etc/hosts"に追加

chroot# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost [ホストネーム]
::1       localhost.localdomain localhost [ホストネーム]

Pacmanの設定

[multilib]を有効にします。

chroot# vi /etc/pacman.conf
    [multilib]
    Include = /etc/pacman.d/mirrorlist

この2行の最初の"#"を消します。[multilib]の行の"#"も消さないとダメです。

パッケージリストの更新
chroot# pacman -Sy

rootパスワードの設定

chroot# passwd

ブートローダのインスコと設定

今回はGRUBを使います

chroot# pacman -S grub
chroot# grub-install --recheck /dev/sda
> Installing for i386-pc platform.
>Installation finishd. No error reported.

上手くインストールできたみたいです

"grub.cfg"を自動生成します。
chroot# grub-mkconfig -o /boot/grub/grub.cfg

パーティションのアンマウントと再起動

Chrootを抜けます
chroot# exit
アンマウント
archiso# umount /mnt
電源を落とします。
archiso# reboot

コンソールページ右上の排出ボタンでディスクを取り出します。  

必要最低限の設定

ネットワークに接続させる

dhcpcdを起動して上げると後は勝手にやってくれます。
arch# systemctl enable dhcpcd.service
arch# systemctl start dhcpcd.service

ユーザーの追加

管理者用のユーザを追加

arch# useradd -m -G wheel -s /bin/zsh [ユーザ名]
先にpacmanでzshをインスコしていたのでデフォルトシェルはzshです
オプション忘れそうなので書いておくと
-m ユーザディレクトリを自動生成
-g プライマリグループ、指定しないと自動でユーザ名&UIDと、同じグループ名&GIDで作成してもらえる
-G セカンダリグループ
-s デフォルトシェル
wheelは、sudoを使えるグループ的な感じ

パスワードの設定

arch# passwd [ユーザ名]

sudoを使えるように設定
arch# visudo
%wheel ALL=(ALL) ALL

行の最初の"#"を消す

Firewallの設定

iptablesの設定

設定はCentOSから引っ張ってきました

arch# vim /etc/iptables/iptables.rules
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
iptablesの起動

arch# systemctl start iptables
すでに起動している場合は再起動しないと設定が更新されません
arch# systemctl restart iptables
んで、起動時にサービスがスタートするように設定
arch# systemctl enable iptables

ちなみに、Archだとデフォルトで/etc/iptables/iptables.rulesが作成されていません。
iptablesは.rulesファイルがないと起動出来ないので注意!

ip6tablesの設定
こっちもCentOSから設定を引っ張ってきました。

arch# vim /etc/iptables/ip6tables.rules
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p ipv6-icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp6-adm-prohibited
    -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
    COMMIT

ip6tablesの起動
arch# systemctl start ip6tables
すでに起動している場合は再起動しないと設定が更新されません
arch# systemctl restart ip6tables
んで、起動時にサービスがスタートするように設定
arch# systemctl enable ip6tables

備考

  • sshだとかの手順はそのうち書く予定

参考サイト

  • 事前準備的なので使用した ConoHaにISOイメージをアップロードするための手順 ConoHaのブログ

変更履歴

6月6日 作成