はじめに
10年くらい前のモデルのVAIO(Windows7)が家にあったので、遊びがてらWindows10にアップグレードして、Ubuntuも入れてデュアルブートにしたという記事です。家の外から公開鍵を使ったSSHでアクセスできるようにもしました。備忘録も兼ねています。
環境
- Windows7 Home
- メモリ 4GB
- 1TBのHDD
そもそもデュアルブート?
Windows10にLinux系を入れるときは、複数の方法が考えられます。
- Windows10で、VirtualBox等を使って仮想環境にUbuntu等を入れる
- デュアルブートにして、別々にOSを入れる
- WSL(Windows Subsystem for Linux)というマイクロソフトが公式で出しているソフトを使う
1の仮想環境を使うという案は、古くてやや低スペックなパソコンには向かないと思い断念。正直3が一番簡単だし安全っぽいけど、なんとなく勉強を兼ねて2でやりました。3でやりたい人は、他の記事を参考にしてください。関連リンクは以下です。
他の方の記事
https://qiita.com/rubytomato@github/items/fdfc0a76e848442f374e
本家の公式ドキュメント
https://docs.microsoft.com/ja-jp/windows/wsl/about
Windows7のアップグレード
まずWindows7をWindows10にします。このやり方は前に記事にしたので、参考にしてください。一応リンク貼っておきます。
簡単に説明すると、マイクロソフトの公式サイトに行って10のダウンロードをして、指示通りにやっていけば簡単にできます。同じWindowsだし、ここは問題ないと思う。
個人的な設定(Windows10)
Windows10が無事入ったら、設定をいろいろいじる。ここはお好みでやってください。
・拡張子を表示させる
「エクスプローラー」->「表示」の右の方にあるのでチェックをつける。
・コントロールパネルをデスクトップに出す
コントロールパネルは結構使うので、デスクトップから簡単にアクセスできるようにする。「設定」->「個人用設定」->「デスクトップアイコンの設定」といくと、デスクトップに表示されるアイコンが変更できます。デスクトップにコントロールパネルを表示するようにしましょう。
・CapsLockをCtrlにする
以下のようなregファイルを作って実行する。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
“Scancode Map”=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00
参考リンク http://www.shin-tan.com/swapKey
パーティションの作成
そもそもパーティションとは
ここでパーティションについて確認する。用語の意味は引用からどうぞ。
パーティションとは、区画、分割(する)、区分、分配(する)、衝立、仕切り、隔壁などの意味を持つ英単語。コンピュータのストレージ(外部記憶装置)の内部を複数の独立した区画に分割すること、および分割された区画のことをパーティションという。
要は1つのHDDを仕切って、Windowsで言うドライブを複数作ったり、別のOSを入れたりすることができるものです。ただこのパーティションは複数の種類があり、その中に「プライマリパーティション」と「拡張パーティション」があります。
「プライマリパーティション」は基本パーティションとも呼ばれて、システム起動が可能なパーティションです。ここからWindowsを起動したり、Ubuntuを起動したりするイメージです。
「拡張パーティション」とは、システム起動ができないパーティションです。この「拡張パーティション」の中に「論理ドライブ」と呼ばれるドライブをいくらでも作れます(DとかEとかのドライブ文字の個数による上限はあります)。
ここで大事なのは、「プライマリパーティション」と「拡張パーティション」は1つのHDDで合計で4つしか作れない、と言うことです。Windows7から10にアップグレードしたパソコンには、すでに4つのパーティションが作られているので、どれかを消す必要が出てきます。もともとWindows10しか入っていないようなPCだったり、複数のHDDが入っているPCならパーティションの削除とかはしなくても問題ないです。
参考リンク
https://pctrouble.net/storage/partition_difference.html
https://www.pc-master.jp/words/partition.html
実際のパーティションの設定
コントロールパネルから「システムとセキュリティ」->「管理ツール」の下の「ハードディスクパーティションの作成とフォーマット」を選択する。
ここでHDDのパーティションを確認すると、Windows7からアップグレードした場合は、既に4つのプライマリパーティションができていると思います。
- Windows7の回復パーティション(1.2GBくらい)
- Windows10の回復パーティション(450MBくらい)
- Cドライブ(起動システム)
- System Reserved
上の画像では、Windows10の回復パーティションがじゃなくてUbuntuが入っていますが、同じように青の「プライマリパーティション」が4つできているはずです。
ちなみに「回復パーティション」とは工場出荷状態に戻したりするためのパーティションです。例えば起動するとこんな感じになります。
Ubuntuを入れるにはこの4つのうちのどれかを消すしかありません。Windows10はまたネットから入れられるので、今回はWindows10の回復パーティションを消すことにしました。
ただ、この「ディスクの管理」からだと回復パーティションは消せません。なので他の方法で消すのですが、やり方は3つあります。
- DiskPart.exeという元々Windowsに入っている実行ファイルを使う
- 回復ドライブの作成中に回復パーティションを消す
- パーティションを管理するソフトを使う
1は「回復パーティション 削除」とかで検索すれば出てきますが、このやり方は私はエラーが出て消せませんでした。「force protected パラメータを設定しないと、保護されたパーティションは削除できません」という全く同じエラーでしたが、gpt attributes = 0x8000000000000000
してもダメでした。2は回復ドライブを作るのがめんどくさいので、3しかありません。ただ怪しいソフトを使いたくないということで、Ubuntuにデフォルトで入っている「GParted」というソフトを使うことにしました。
Ubuntuの入手
UbuntuのBootable USBを作ります。
- ソフトを使う。RufusとかUniversal USB Installerとか。ちなみにRufusはUbuntuが公式で推奨しているやり方のようです。
- (UNIX系のパソコンがあれば)
dd
コマンドから作成する。この詳細も前に書いたのでこちらを見てください。
Ubuntuの起動(GPartedの起動)
F2かF10かDelを連打しながらVAIOを起動します。このVAIOではF2連打でBIOSが起動しました。自分のPCがどのキーで起動するかは、「自分のPC名 BIOS 起動」とかでググりましょう。
ここで起動の優先順位を変更します。普段はHDDから起動するようになっていますが、今回はUSBのUBuntuから起動して欲しいので、External Device BootをEnable、Boot Priorityの1番目をExternal Deviceにします。
これで設定を保存(Save Changes)してから、BIOSを抜けます(Exit Setup)。するとUbuntuが起動するので、Try UbuntuでUbuntuを起動します。もしWindowsが立ち上がるときは、USBにうまく書き込めてない可能性があるので、やり直しましょう。Windowsが起動してしまったときは、「更新とセキュリティ」->「回復」->「PCの起動をカスタマイズの「今すぐ再起動」を使うという方法もあります。
うまくUSBのUbuntuが起動したら、左下のShow ApplicationsからGPartedを起動します。Windowsからは回復パーティションが消せないので、それならUbuntuから消すという方式です。
LabelがRecoveryとなっているパーティションを削除します。下の写真では既に1つ消してUbuntuが入ってる画像ですので、参考程度にしてください。
これでInstall Ubuntuを起動して指示通りインストールすれば大丈夫です。下の画面で、「ディスクを削除してUbuntuをインストール」と言う選択肢しかない場合は、パーティションのフォーマットがちゃんとできていない可能性があります。GPartedなりWindowsのディスクの管理等でちゃんとフォーマットしましょう。容量も気を付けてください。
この写真は一番上がUbuntuの再インストールになっていますが、Windows10しかないときは、Windows10は残しつつUbuntuを入れるという感じの選択肢になるはずです。そうならない人はパーティションの設定を見直しましょう。
個人的な設定(Ubuntu)
ここもお好みで。
・日本語入力にする
Region&LanguageからJapanese(Mozc)を追加する。Mozcがない人は、sudo apt install ibus-mozc
でインストールして、再起動すればあります。なお、ただのJapanesは消すと設定が変になるので残しておきましょう。
設定は英語なのに、日本語キーボードのときは配列が変になっているはずなので変更。
sudo dpkg-reconfigure keyboard-configuration
Keyboard model: Generic 105-key (Intl) PC
Keyboard model: Japanese
Keyboard layout: Japanese
Keyboard layout: The default for the keyboard layout
Compose key: No compose key
という流れでOK
・emacsを入れる
sudo apt update
sudo apt upgrade
sudo apt install emacs
もしGUIが起動するときは.bashrcにalias emacs='emacs -nw'
を追記して、CUIから開くようにする。
・CapsLockをCtrlにする
sudo emacs /etc/default/keyboard
として、XKBOPTIONS="ctrl:nocaps"
と書き換える。ただしこれはシステム全体に適用されるので、他の人が使うPCでやるのは注意。
また「GNOME tweaks」というソフトを使って変換するという方法もあります。
参考リンク https://linux.just4fun.biz/?Ubuntu/Caps-LockキーをCtrlキーにする方法
sshのための設定
openssh-serverのインストール
まずはUbuntuでsudo apt install openssh-server
を実行する。その後に/etc/ssh/ssh_configを変更する。
//ルートでのログイン禁止
PermitRootLogin no
//RSA認証の有効化
RSAAuthentication yes
//パスワードによる認証を許可
PasswordAuthentication yes
//空のパスワードは拒否
PermitEmptyPasswords no
参考リンク https://futurismo.biz/archives/6862
hostname -I
からUbuntuのローカルIPアドレスがわかるので、他の端末から接続してみる。クライアントがWindowsならTeraTerm等のソフトをインストールして繋ぎましょう。クライアントがUNIX系なら、ssh ユーザー名@ローカルIP
で繋がるはずです。
ローカルIPの固定
ここからは自宅のルーターの設定も行います。家のルーターはhttp://192.168.1.1
で設定画面にアクセス可能だった。ここら辺は個人でかなり異なるはずなので、自分でルーターの型番とかを検索して、やり方を調べるのが一番です。ログインに必要な初期パスワードとかも説明書に書いてあったりします。
まずは自宅のLAN内のIPアドレスを固定するようにします。「このパソコンは常に192.168.1.4」というように固定する感じです。このルーターは「DHCPスタティックIP設定」と言う名前で設定するようです。
実はルーターを介さずにUbuntuからローカルIPの固定ができたりします。参考記事は以下をどうぞ。
ポートマッピング設定
外部からのアクセスを、特定のパソコンに繋ぐ設定です。「アプリケーション」に「セキュアシェル(ssh)」を、「内部ホスト」にさっきのローカルIPアドレスを、「プロトコル」はデフォルトのTCPを指定する。内部ポート番号は22にし、外部ポート番号は安全のために10022などの適当な数字にする。
グローバルIPアドレスとホスト名を紐付け
例えば36.110.113.89
のようなグローバルIPをmyubuntu.mydns.jp
のようにドメイン名に紐付けておくことで、ルーターのグローバルIPアドレスが変わっても大丈夫なようにします。グローバルIPアドレスが変わるときは、DNSサーバーという名前解決をしてくるところに自動でその情報を送ることで、設定を維持し続けてくれるようです(気になる人は「ダイナミックDNS」で検索)。
無料でやってくれるところはいくつもある(例えばこことかこことか)のですが、どこも登録が必要で面倒だったので、省略しました。そんな頻繁に変わる印象がないので、設定しなくても個人でちょいちょい繋ぐ程度なら問題ない気がするのですが、どうなんでしょうか。
グローバルIPアドレスはUNIX系ならcurl inet-ip.info
、Windowsならcmanにアクセスすることで求まります。
ここまでで、ssh -p 外部ポート番号 ユーザー名@グローバルIPアドレス
とやってアクセスできればOK。どうもヘアピンNATと呼ばれるルーターの仕組みで、内部から外部グローバルIPアドレスにアクセスしようとすると失敗することもあるので、そういう人は設定を直してください。私は大丈夫でした。
公開鍵認証の設定
以下では、クライアント側はUNIX環境を想定して認証設定を行う。大体似たようなことはwindowsでもできるようですが、今回はやってないので省略。
ssh-keygen -t rsa
-t
オプションではrsaの他に、dsa、ecdsa、ed25519といった認証方法が選べます。このあとは秘密鍵にアクセスするためのパスワードを聞かれるので、設定しましょう。
これで秘密鍵がデフォルトで~/.ssh/id_rsa
に、公開鍵が~/.ssh/id_rsa.pub
に作られます。
毎回ssh
するたびに、秘密鍵へのパスワードを聞かれるのは面倒なのでssh-agent
を使う。
ssh-add -l
で鍵の登録状況を確認
ssh-add .ssh/id_rsa
で鍵を登録
これで一度鍵を登録することで、パスワードの入力を省略することができます。ただ、これで登録してもクライアントがシステムの再起動をするたびにssh-add
し直さなきゃいけない気がするのがネック。何か良い方法あれば教えてください。
一応他に使いそうなオプションも見ておくと
ssh-add -D
で全ての鍵の登録を削除
ssh-add -d .ssh/id_rsa
のように-d
でひとつひとつ削除
ssh-add -A
で、一括で複数の鍵を登録
詳しいことはman ssh-add
で見るべし。
次に作成した公開鍵をscp
コマンドでサーバー側に送る。scp .ssh/id_rsa.pub ユーザー名@IPアドレス:~
のようにして送る。サーバー側では、それを.ssh/authorized_keyに書き加える(初めての人は作る)。
cat id_rsa.pub >> .ssh/authorized_keys
これで鍵の設定は完了。
エイリアス的なものを作る
毎回IPアドレスを打つのはめんどいので、例えばssh ubu
のように短くできるようにする。これには.ssh/configを書き直す。
Host ubu
HostName 外部IPアドレス、もしくはドメイン名
IdentityFile ~/.ssh/id_rsa(秘密鍵)
Port ポート番号
User ユーザー名
これでssh ubu
ができるようになる。もしローカルからしかアクセスしないっていうのを作りたいなら
Host ubuntu
HostName ローカルIPアドレス(例えば192.168.1.4とか)
User ユーザー名
という風にすればローカルネットワークにつながっているときはssh ubuntu
で繋がる。もっと詳細な設定をしたい人はドキュメントを見ましょう。
これで自宅外から繋げられたら設定終了です。
参考文献
https://qiita.com/yo_kanyukari/items/2a944a300db22482c696
https://qiita.com/rintarou/items/bef523c7c8f11097e577
https://www.hiroom2.com/2018/04/29/ubuntu-1804-ibus-mozc-ja/
今回はWindowsとUbuntuのデュアルブートですが、ただWindowsにSSH接続したいならこういう方法もあります。お好みでどうぞ。