カテゴリーアーカイブ インフラ

takahashi 著者:takahashi

Let’s Encrypt+MyDNSでサブドメインのワイルドカードを取得する方法

以前、無料のSSL発行サービスであるLet’s Encryptと無料のDDNSサービスであるMyDNSを組み合わせて自動でワイルドカード証明書を取得・更新する方法をご紹介しましたが、前回の方法だけではサブドメインのワイルドカード証明書(例:*.hoge.example.com)を取得することはできませんでした。

今回はそのサブドメイン証明書をLet’s Encrypt+MyDNSの環境で自動取得・更新する方法をご紹介します。

本題に入る前に、そもそもなぜサブドメインにワイルドカード証明書が必要なのか、について説明します。

折角ワイルドカード証明書がとれるようになったのだから

*.example.com

の証明書だけとっておけば全部使えるじゃん!

そう思う方もいらっしゃるかもしれません。

ここがややこしいところなのですが、実は*.example.comのSSL証明書は例えばhoge.example.com に対しては有効ですが、 *.hoge.example.com(正式な呼び名ではないですが、ここでは便宜上”サブサブドメイン”と呼びます。)に対しては有効ではありません。

ということで サブサブドメインにも適用可能なワイルドカード証明書を作るためには、サブドメインのワイルドカード証明書が必要である、という説明でした。

それではその”サブドメインのワイルドカード証明書”を、Let’s Encrypt+MyDNSで取得してみましょう。

まず、MyDNSにログインします。

メニューから

USER INFO

を選択すると、登録情報編集画面が開くので、その中の

子ID関連の”追加する子IDの数”を追加するサブドメイン分選択します。

これで登録すると、申請した分の子IDのログイン情報がメールで送られてくるので、その情報をメモします。

次に、親IDにログインしたまま、DOMAIN INFOへ移動して、レコード情報に次のように入力します。

サブドメイン名を入力し、DELEGETEを指定すると、そのサブドメインの設定を行末で指定するmydnsのIDに一任させるように指定することができます。

指定するmydnsのIDは、先ほど登録情報欄で増やしたmydnsIDを選択します。

詳細は公式のドキュメントを参照してください。

https://www.mydns.jp/?MENU=030

ここまで出来たら、後は以前ご紹介した手順をサブドメイン分繰り返します。

ただし、
DirectEdit-master
はサブドメイン分用意する必要がありますので注意が必要です。(txtedit.confに登録できるアカウント情報が1つのみのため、アカウント分用意してそれぞれtxtedit.confを設定する必要があるため。)

ディレクトリ名を変えてインストールなどして対策してください。

これでサブドメインでもワイルドカード証明書の自動取得・更新をすることができました。

サブドメインの証明書が必要な方は是非試してみてください。

  • この記事いいね! (0)
takahashi 著者:takahashi

LinuxにsmartdをインストールしてHDDが壊れたときにメール通知してもらう方法

社内には一台テストサーバーが置かれてます。こちらのテストサーバーのストレージはRAID構成になっていないため、代わりに故障の兆しを見逃さないためにHDDのSMART情報に何か異変があったらメールが飛ぶようにしてみました。

なお、メールを送信するにはあらかじめメールサーバーのセットアップが必要です。

今回はUbuntuをベースに紹介します。

まず、smartdをインストールします。

sudo apt install smartmontools
sudo systemctl enable smartd

smartdの設定をしていきます。

/etc/smartd.conf

をテキストエディタで開き、下記のように変更します。

#-の行を削除し、+の行を追加
- DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
+ #DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner

+ DEVICESCAN -a -M test -m 通知送付先メールアドレス -s スケジュール

“-M test” と入れておくとsmartd起動時にテストメールを送信してくれます。

スケジュールの指定については参考サイトを参照してください。

S.M.A.R.T. – Arch Linux

完了したらsmartdを起動(再起動)します。

sudo systemctl restart smartd

この時点でメールが送信されてこれば、セットアップは完了です。

参考サイト:
S.M.A.R.Tの値をsmartd で監視してメールを送る – それマグで!

  • この記事いいね! (0)
takahashi 著者:takahashi

IPFSにファイルをアップロードしてみた!

前回の記事で、IPFSのインストール方法についてご紹介しました。
今回は実際にIPFSに対してファイルをアップロードしてみたいと思います。

前回までの操作で、ipfsコマンドがどのユーザー・どのディレクトリからでも叩ける状態になっているはずです。
今回は、自分が撮影した画像で、IPFSに上げても問題なさそうなものを使用してみました。
IPFSに一度アップロードしたファイルは基本的に二度と削除することは出来ませんので、アップロードする際は十分注意してください。

まず、IPFSにアップロードしたいファイル(形式はなんでも大丈夫ですが、あまり大きくない方がよさそうです。)をipfsコマンドを動かす環境上に用意します。

ファイルを準備したら、実際にアップロードを行ってみます。

ipfs add ファイル名

するとファイルに紐づく一意のID(ハッシュ値)が生成されます。

$ ipfs add hoge.txt

added Qm678e851755589c2ed8905b10e0e8302a694af7e40ee86abacfa4bddfba859bb1 hoge.txt

IPFSでは、このハッシュ値こそがHTTPでいうURLのような、絶対的なパスとなります。

なぜハッシュ値が使われるのかというと、もしIPFS上に全く同じファイルが存在した場合、重複したファイルを同じファイルとして扱うことができる(IPFS上では単に目的のファイルを閲覧できればいいので、何処で上げたか、誰が上げたかは区別されない)上、内容が少しでも異なっていれば違うハッシュ値になるという特性からコンテンツの内容とハッシュ値が1:1で対応するからです。

ipfsではアップロードしただけではファイルの永続性が保証されないので、ipfsコマンドで”pin”をしてファイルを永続化させます。

ipfs pin add コンテンツのハッシュ値

あとは
https://gateway.ipfs.io/ipfs/コンテンツのハッシュ値
のようにIPFSゲートウェイから参照すると、自分が先程アップロードしたコンテンツの内容がブラウザ上で表示されるはずです。

なお、実際にIPFSでWebサイトなどを公開しようとした場合を考えた時、コンテンツの更新時に毎回異なるハッシュ値が生成されることになるので、毎回リンク先が変わってしまうことになります。

これでは不便なので、IPFSには”IPNS”という仕組みが備えられています。
IPNSはIPFS上にアップロードしたコンテンツに対してランダムな名前(エイリアス)を付けることができる仕組みです。

IPNSを利用することで、元のコンテンツを更新しても、IPNS名を使えば同じ名前で更新後のコンテンツへアクセスすることができるようになります。

コンテンツをIPNSと紐づけるには

ipfs name publish コンテンツのハッシュ値

のようにコマンドを実行します。

紐づけたコンテンツは

https://gateway.ipfs.io/ipns/上のコマンドで出力されたipns名

のように各IPFSゲートウェイから参照できます。

実際にIPFSを触ってみた感想として、IPFSのアイデアはとても面白いと感じました。

特に、一度IPFS上にアップロードしてしまえば、どのIPFSゲートウェイノードからでも同じコンテンツが参照できてしまうのはなかなか面白い仕組みだと思います。

一方で、IPFS自体にはまだ認証システムが備わっておらず、アップロードしたファイルはハッシュ値さえ知られてしまえばだれでも閲覧可能であったり、
IPFS上にアップロードしたファイルはアップロードした本人ですら削除できないため、誤って重要なファイルをIPFSにアップロードしても取り消せなかったり、また使用されなくなったファイルがゴミとしてIPFS上に残り続けてしまう、などといった弱点も見えてきました。

完全に一般公開するようなコンテンツであれば現状でも問題ありませんが、HTTPをIPFSで置き換える為には、やはり認証の問題は避けては通れないと思います。

この辺りがもう少し解決されれば、いよいよ実用的に利用できる段階になっていくのではないかな、と思いました。

是非今後の展開に注目したいですね。

参考:

IPFSを触ってみた

IPFSを使って無料で静的サイトをホスティング(公開)してみる

  • この記事いいね! (0)
takahashi 著者:takahashi

CentOS7にIPFSをセットアップしてみる

以前記事でご紹介したIPFSですが、今回は実際に自分の持っているCentOSの環境にIPFS環境一式をインストールしてみました。

今回はそのやり方についてご紹介したいと思います。

まず、IPFSの動作にはgo言語の動作環境が必要になりますのでインストールします。

sudo yum -y install go
または
sudo yum -y install golang

次にIPFSをインストールするために必要な環境を整えます。
/usr/local/
ディレクトリにgo言語周りのパッケージをインストールする場所を作成します。

sudo mkdir -p /usr/local/go

次にパスを通します。

sudo vi /etc/profile

を実行し、一番下の行に次の記述を追記します。

PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/local/go
export GOBIN=$GOPATH/bin

一度ログイン中の端末からログアウトし、再度ログインします。

次に下記のコマンドを実行します。

go get -u -d github.com/ipfs/go-ipfs #ipfsソースを入手
cd $GOPATH/src/github.com/ipfs/go-ipfs #ipfsソースダウンロード先へ移動
sudo su - #"sudo  -s"でやると/etc/profileでexportした環境変数が消失するため
make install #ipfsをビルド
exit #rootユーザーからログアウト

するとIPFSパッケージがビルドされ、$GOPATH/binへインストールされます。

ビルドが完了したら、ipfsコマンドが利用できるか確認します。

ipfs --help

下記のような表示がされたらインストールは成功しています。

USAGE
  ipfs - Global p2p merkle-dag filesystem.

SYNOPSIS
  ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...

OPTIONS

  -c,              --config   string - Path to the configuration file to use.
  -D,              --debug    bool   - Operate in debug mode.
  --help                      bool   - Show the full command help text.
  -h                          bool   - Show a short version of the command help text.
  -L,              --local    bool   - Run the command locally, instead of using the daemon. DEPRECATED: use --offline.
  --offline                   bool   - Run the command offline.
  --api                       string - Use a specific API instance (defaults to /ip4/127.0.0.1/tcp/5001).
  --enc,           --encoding string - The encoding type the output should be encoded with (json, xml, or text). Default: text.
  --stream-channels           bool   - Stream channel output.
  --timeout                   string - Set a global timeout on the command.

SUBCOMMANDS
  BASIC COMMANDS
    init          Initialize ipfs local configuration
    add <path>    Add a file to IPFS
    cat <ref>     Show IPFS object data
    get <ref>     Download IPFS objects
    ls <ref>      List links from an object
    refs <ref>    List hashes of links from an object
  
  DATA STRUCTURE COMMANDS
    block         Interact with raw blocks in the datastore
    object        Interact with raw dag nodes
    files         Interact with objects as if they were a unix filesystem
    dag           Interact with IPLD documents (experimental)
  
  ADVANCED COMMANDS
    daemon        Start a long-running daemon process
    mount         Mount an IPFS read-only mountpoint
    resolve       Resolve any type of name
    name          Publish and resolve IPNS names
    key           Create and list IPNS name keypairs
    dns           Resolve DNS links
    pin           Pin objects to local storage
    repo          Manipulate the IPFS repository
    stats         Various operational stats
    p2p           Libp2p stream mounting
    filestore     Manage the filestore (experimental)
  
  NETWORK COMMANDS
    id            Show info about IPFS peers
    bootstrap     Add or remove bootstrap peers
    swarm         Manage connections to the p2p network
    dht           Query the DHT for values or peers
    ping          Measure the latency of a connection
    diag          Print diagnostics
  
  TOOL COMMANDS
    config        Manage configuration
    version       Show ipfs version information
    update        Download and apply go-ipfs updates
    commands      List all available commands
    cid           Convert and discover properties of CIDs
  
  Use 'ipfs <command> --help' to learn more about each command.
  
  ipfs uses a repository in the local file system. By default, the repo is
  located at ~/.ipfs. To change the repo location, set the $IPFS_PATH
  environment variable:
  
    export IPFS_PATH=/path/to/ipfsrepo
  
  EXIT STATUS
  
  The CLI will exit with one of the following values:
  
  0     Successful execution.
  1     Failed executions.

  Use 'ipfs <subcmd> --help' for more information about each command.

最後に、ipfsを使用するユーザー(ipfsへファイルをアップロード・ダウンロードするユーザー)で下記のコマンドを実行します。

ipfs init

するとipfs上での自ノード専用のキーが発行・保存され、セットアップ完了です。

initializing IPFS node at /ユーザーディレクトリのパス/.ipfs
generating 2048-bit RSA keypair...done
peer identity: 自分のipfsノードのキー
to get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

ファイルのアップロードやアップロードしたファイルを閲覧する方法などはまた後日解説したいと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

AWS EC2 でストレージ容量を拡張する方法

急遽テストで使用しているAWS EC2インスタンスのボリューム(EBS)を拡張する必要が出てきたのですが、思ったより簡単にできました。

まず、ダッシュボード上の”ボリューム”をクリックします。

現在使用中のボリュームの一覧が出てくるので、その中から拡張したいボリュームを右クリックし、”ボリュームの変更”をクリックします。

すると下記のようなウインドウが出現。

サイズに拡張後の容量を入力します。

これでAWS上での手続きは完了で、ボリュームの拡張は行われますが、実際に拡張分の容量を利用できるようにするためにはOS上でパーティションの拡張を行う必要があります。
ありがたいことに、このコマンドはOSを起動したまま実行可能です。

まず、拡張対象のデバイスパスを確認します。

sudo lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  10G  0 disk
└─xvda1 202:1    0   8G  0 part /

今回の目的のディスクはxvda1です。

AmazonLinux2では下記のように行います。

sudo growpart /dev/xvda 1 #パーティションを拡張
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=20967391,end=20971487
sudo xfs_growfs /dev/xvda1 #ファイルシステムを拡張(xfsの場合)
meta-data=/dev/xvda1             isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 2620923
df -h #変更結果を確認
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           493M  516K  493M   1% /run
tmpfs           493M     0  493M   0% /sys/fs/cgroup
/dev/xvda1       10G  7.7G  2.4G  77% /
tmpfs            99M     0   99M   0% /run/user/1000

これで無事拡大されました!

  • この記事いいね! (0)
takahashi 著者:takahashi

Softbankの携帯回線大規模通信障害 原因は交換機のソフトウェアアップデート

昨日12/6、13時ごろから、Softbank系列のモバイル回線で、全国的にパケット回線や音声回線に接続できなくなる大規模障害が発生しました。
18時ごろから復旧が始まったとのことだったので、実に4~5時間ほど通信不能になっていたようで、期間的にもかなり長引いた印象でした。

ニュースを見ると、携帯が使えなくなったことで、一時的に公衆電話も復権したようですね。

嘘でしょ!?「公衆電話を初めて使った」という声にネットざわつく – NAVERまとめ

公衆電話の使い方がわからない…なんて話も。
自体の流れを感じます(;´∀`)

さて、今回の通信障害の原因ですが、後にSoftbankが公式に発表をしています。

2018年12月6日に発生した携帯電話サービスの通信障害に関するおわび – Softbank

ソフトバンク、通信障害の原因を公表 エリクソン製交換機ソフトの「期限切れ」- ITMedia

また、エリクソン社自身も同様の発表を行い、謝罪をしています。
Update on software issue impacting certain customers – Ericsson

Softbankは携帯基地局同士をつなぐ”コアネットワーク”に存在し、各携帯端末の通信状態や認証を管理する機器MMEにエリクソン社製の製品を使用しています。

【MME】- NTTPCCommunications用語解説辞典

複数の記事を読んでいくと、どうやらこの機器を動作させるためのソフトウェアにアップデートが行われ、そのアップデートに含まれている”証明書”が古いものであったために有効期限切れとなり、機器の動作障害を引き起こしたようです。
その証拠としてSoftbank以外の海外のキャリアで、エリクソン社製のMMEを利用している業者についてもほぼ同時刻に同様の不具合が発生していたようです。

また、エリクソン社のMMEの機能として、大量の端末を同時に管理できるようにするために、その処理の一部をクラウドサーバーに代わりに行わせることができる機能”vMME”もあるようです。

ソフトバンク、エリクソンのVirtual MMEとクラウドプラットフォームを導入 – Ericsson

今回の”証明書”がなんの証明書を指すのがは詳細に発表されていないのでわかりませんが、恐らく機器のソフトウェアの正当性(本物かどうか)を検証するためのソフトウェア署名の証明書か、vMMEと通信する際に通信先のクラウドサーバーが正しいサーバーかどうかを検証するための証明書あたりではないかなと思います。

いずれの場合であっても有効期限切れになってしまうことでシステムが正常に動かなくなってしまう問題なので、かなりヤバい状況だったのではないかなと思います。
結果的に、ソフトウェアを以前のバージョンにダウングレードしたことで、とりあえず復旧したようです。

今回の根本的な原因はエリクソン社のミスで、たまたまその機器を使用していてとばっちりを受けてしまったSoftbankにとっては大変な災難だったと言えそうです。

  • この記事いいね! (0)
takahashi 著者:takahashi

CentOS 7 にPHP7.1をインストールする方法

最近、徐々にPHP 7系を要求するアプリケーションやフレームワークが多くなってきました。
一方で、CentOS 7はデフォルトでは古めのパッケージのみを提供しているので

sudo yum -y install php 

としてもphp5.6系しかインストールできません。

しかし、CentOSで利用できる外部のリポジトリ”epel”と”remi”を用いることでphp7系をCentOS 7へインストールすることが可能になっています。
今回は、その方法をご紹介したいと思います。

まず、現時点で古いバージョンのPHPが入っている場合は、一度アンインストールが必要になります。
もし古いバージョンのPHPも必要な場合は複数のバージョンのPHPを共存させる必要となり、今回の手順ではセットアップできませんのでご注意ください。

PHPが既にインストールされているか確認します。

php -v

として

PHP 5.4.16 (cli) (built: Apr 12 2018 19:02:01) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

のようになっていれば、既に古いバージョンがインストールされているので、一旦アンインストールします。

sudo yum -y  remove  php-cli php-common

epelリポジトリをインストールします。

sudo yum -y install epel-release

remiリポジトリをインストールします。

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

ここまで行えば、php7.1のインストールが可能になっています。
次のコマンドでphp7.1をインストールしてみます。

sudo yum install --enablerepo=remi,remi-php71 php php-devel 

インストール完了後、再度php -vをして

php -v
PHP 7.1.24 (cli) (built: Nov  7 2018 18:45:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

となっていれば成功です。

なお、remiリポジトリからphpに入れた際、PHPモジュールの参照先が別の場所になってしまうことがあるようです。
その場合は、php.iniに次の記述を追加してください。

extension_dir = "/opt/remi/php71/root/usr/lib64/php/modules" 

※PHPバージョンによって異なります。”sudo rpm -ql インストールしたphpのパッケージ名”を実行してインストール先を確認してください。

  • この記事いいね! (0)
takahashi 著者:takahashi

WindowsのSSHクライアント”Rlogin”で多段SSH接続したときに定期的に接続が切れてしまうときの対処法

最近、複雑なネットワーク構成のサーバー(とくにAWS系のシステム)でしばしばSSHの多段接続が必要になることがあります。
多段接続とは、VNCやTeamviewerなどのリモートデスクトップに例えると、手元のPCからリモートマシンへ接続した後、さらにそのリモートPC内にあるリモートデスクトップソフトを立ち上げて、さらに別のマシンへ接続するような繋げ方をすることをいいます。

なんでこんなめんどくさいことをするかというと、最終的に接続するサーバーがインタ―ネットと直接使がっていない場合があり、そういった時はインタ―ネットと直接つながっている端末経由で接続する必要があるためです。

本当は直で繋げたいところですが、セキュリティ上の理由であったりグローバルIPの制約で公開できるサーバーの数が限られていたりなど様々な理由で敢えてこのような設計にせざるを得ない場合があります。
この場合、単純にシェルをたたくだけなら問題ないのですが、例えばFTPなどを使ってファイルをやり取りしたり、その他のアプリケーションやプロトコルで目的のサーバーと通信したいときなどはちょっと困ることがあります。

こういう時のために、Windows用のSSHクライアント”Rlogin”ではSSHプロキシ接続機能が用意されていて、あらかじめ設定しておけば、踏み台となるサーバーのSSHサーバーを経由して内部のサーバーに直接接続ができる経路を作ってくれる”トンネリング”を行うことができます。

今回は、Rloginで行えるSOCKS5プロトコル経由でプロキシした際に発生した”定期的にSSHが切断される”問題の解決方法をご紹介します。

実はSSHサーバーには、デフォルトで一定時間通信しない(idle状態にしておく)と接続を切ってしまう仕様になっているものがあります。
そのせいか、自分の手元の環境では、踏み台サーバーへのトンネルが一定時間後に切られてしまうことが結構ありました。

サーバーではバックグラウンドで長時間処理させることもしばしばあるので、肝心な時にコネクションが切れてしまうとなかなか大変です。

いろいろ設定を変えてはみたのですが、なかなか改善せず、ずっと悩んでいましたが…
今回ようやく解決方法を見つけました!

Rloginのサーバー設定の左ペインにあるサーバー->プロトコル をクリック。

下記のような画面が出てくるかと思いますので、

赤枠部分にチェックを入れ、KeepAliveの間隔を数十秒ほどにしておきます。
実際に適した設定値は各SSHサーバーの無通信でいつまで接続を維持するかの設定によって異なってきます。切断される前にKeepAiveの信号が送られるように秒数を変更してください。

ここを変更しただけで、いままで1分ほどで切られていたコネクションが、10分以上放置しておいても維持されるようになりました。

お困りの方は是非試してみてください。

  • この記事いいね! (0)
takahashi 著者:takahashi

IBMがRedHatを買収 気になるRedHat系OSへの影響

昨日、衝撃のニュースが発表されました。

IBMがRedHat買収合意を発表。買収額約3.8兆円、クラウド分野でアマゾン・マイクロソフト追撃 – Engadget 日本版

なんとオープンソース界隈で非常に大きな影響力をもつRedHat社がIBMに買収されてしまいました。
しかもその買収額は3兆8000億というとんでもない額。これには世界中のIT界隈の人々が驚いたことだと思います。

RedHat社は商用(有料)Linuxディストリビューションの中でも非常に人気の高いRedHat Enterprise Linux (RHEL)を開発、販売している会社です。
また、Linuxディストリビューションのfedoraや、RHELのオープンソース部分を使用して作られたCentOSなどともかかわりが深く、開発に協力していたり、これらのディストリの成果をRHELにも取り込んでいたりと、かなり密接な関係をもつ、オープンソース界隈でもかなり影響力の高い企業でした。

今回の買収でRedHatが完全にIBM傘下に収められたわけですが、個人的に懸念していることがあります。
RedHatは完全にオープンソースへの協力を積極的に行っている企業なのは目に見えてわかりますが、一方IBMについては、個人的に「…?」という印象でした。
もしかすると実際はいろいろなプロジェクトを支援しているのかもしれませんが、少なくとも最近になってオープンソース支援へとシフトしつつあるMicrosoftよりも地味な印象でした。

買収後もRedHatの動きについては現状のままにしたいとIBMは言っているようですが、IBMのオープンソースへのスタンスがいまいちわからないので、個人的にはちょっと不安です。

CentOSは、もともとRHELのオープンソース部分を利用して、有志のメンバーがRHELと同等の機能を持つことを目指して開発されている、RedHat Linuxから派生したRedHat系のLinuxディストリビュージョンです。CentOS自体はもともとRedHatとは関係がありませんでしたが、2014年にRedHatが正式に派生OSとして承認を出し、RedHatから直に開発支援を受けられる状態になりました。

今更聞けない!CentOSとRed Hatの違いとは? – エンジニアの入り口

そんなわけで、現在CentOSはサーバーOSとして非常に人気が高く、LinuxをサーバーOSとして使用する企業や団体の多くで使用されている上、各IaaSクラウドサービスのほどんどで公式フレーバーが提供されているほどになっています。

今後IBMが介入してくることでこういったCentOSや同じくRedHatが支援するfedoraとの関係が変化してしまうのではないか、と個人的に心配しています。

ただ、買収されたからと言って悪い方に転ぶとは限りませんし、今よりより良くなっていく可能性もあると思います。
今後RedHatの買収によってこの辺りがどうなっていくのか…注目していきたいですね。

  • この記事いいね! (3)
takahashi 著者:takahashi

WindowsにVirtIOドライバをインストールする方法

サーバー準仮想化の仕組みの一つに、”VirtIO”というものがあります。
例えば仮想マシンでNIC(ネットワークアダプタ)やディスクドライブをソフトウェアで完全に仮想化してしまうと、物理ハードで動かした場合と比較して必要な処理が多くなり、オーバーヘッド、つまり余分な負荷が増えてしまいます。
余分な負荷が増えることで、結果として可能マシンの動作が遅くなってしまうのです。

仮想マシンの仕組み上からこのオーバーヘッドを少しでも減らす方法の一つとして、一部の処理を物理的なハードウェアに直接行わせてしまう”準仮想化”という方法が用いられます。完全な仮想化ではないので”準”仮想化です。

VirtIOも、ディスクへのアクセスやネットワークへのアクセスを”準仮想化”する仕組みの一つで、最近の主要な仮想マシンやクラウドサービスなどでよく使われています。
VirtIOを使用することで、完全仮想化されたハードウェアを使用する場合と比較してより高速に仮想マシンを動作させることができます。

Linuxディストリビューションには標準でVirtIOドライバが含まれている場合が多いのですが、Windowsの場合、初期状態ではVirtIOドライバがインストールされていないのでドライバのインストールが必要になります。

今回は、セットアップ済みのWindowsにVirtIO-NETドライバをインストールする方法をご紹介します。

VirtIOのドライバはfedoraプロジェクトのサイトで配布されています。

Creating Windows virtual machines using virtIO drivers – fedoraDOCS

この中の
Stable virtio-win iso
を選択し、isoファイルをダウンロードします。

isoファイルを入手したら、各仮想マシンに光学ドライブとしてマウントします。
マウントする方法は仮想マシンソフトによって操作方法が異なるため、各ソフトのマニュアルを参照してください。

OSからは光学ディスクドライブ(CD/DVDなど)として認識されていればOKです。
マウントが完了したら、デバイスマネージャーを開いてください。

デバイスマネージャーはコントロールパネル(コントロール パネル\システムとセキュリティ\システム)、またはWindowsロゴ(スタートメニュー)を右クリック->デバイスマネージャーから開くことができます。

デバイスマネージャーを開くと、いくつかの黄色い”!”が表示されているかと思います。

“!”マークが表示されているデバイスを右クリックし、”ドライバーソフトウェアの更新”をクリックします。


するとこちらのダイアログが表示されるので
“コンピュータを参照してドライバーソフトウェアを検索します”
をクリック。

下記画面が出てくるので…


先程VirtIOのISOイメージをマウントしたドライブを選択します。
すぐ下の”サブフォルダーも検索する”もかならずチェックを入れてください。


適合するドライバの検索が始まります。

途中、許可を求められた場合は”インストール”をクリックしてください。

下記の画面になればインストールは成功です。

デバイスマネージャーで”Red Hat VirtIO Ethernet Adapter”が追加されていれば、正常に動作しています。

なお、ディスク側のVirtIOのインストールは、先にOSがインストールされたディスクをVirtIOに切り替えてしまうと正常に起動しなくなる可能性があります。
ストレージを完全仮想化状態のままにしてOSを起動し、外付けのVirtIOディスクを追加したうえでドライバーをインストール、作業が終わったらシステムディスクをVirtIOに変更すればOKのようです。

詳細はこちらの方の記事を参照してください。

KVM上のWindowsでVirtIOを利用する – 出力を入力へ

VirtIOはセットアップはめんどくさいですが、動作速度の改善が測れますし、やっておいて損はないかと思います。
仮想マシンを利用されている方は是非試してみてはいかがでしょうか。

  • この記事いいね! (0)