外部記憶装置

脳みそ小さすぎるからメモしとく

リレー式計算機で円周率を計算する その0

リレー式計算機とは?

コンピュータ黎明期はダイオードとリレーによって構成されたコンピュータが主流でした。時代が進むに連れて素子は真空管トランジスタLSIと微細化・省電力化が進み、今のような超小型ICが実現しました。今回はあえて時代に逆行し、リレーとダイオードを利用した計算機を自作したいと思います。CPUはもちろんRAMなどにもICは一切利用しません。具体的な目標としては、第一段階としては円周率3.14の計算です。第2段階では円周率10桁の計算を目標とします。(そういえば今日は円周率の日ですね)

目的

ロマン以外の何物でもない。

方針

以下のような工程で進めていくつもりです。

  1. 円周率計算公式の選定
  2. 計算アルゴリズムの大まかなフロー作成
  3. CPUの命令セット決定
  4. 命令セットに基づいたCPUエミュレーターの作成
  5. 専用アセンブラ作成
  6. プログラム作成
  7. CPUエミュレーター上でプログラムの検証
  8. 回路設計
  9. 回路に基づいたCPUシミュレータの作成
  10. CPUシミュレータ上での回路検証
  11. 組み立て
  12. 実働テスト

今現在2.計算アルゴリズムの大まかなフロー作成まで完了しているので近いうちに記事にします。 計画としては11月にある大学の学祭に間に合うようにするつもりです。

Debian9にKimchiを導入する。その1(インストール編)

f:id:PiBVT:20180222013850j:plain

Kimchiとは

Kimchiは仮想マシンの管理をWebGUIで行うことのできる、wokのプラグインです。同じようなものとしては、WebVirtMgrやoVirtがありますが、今回はインストールイメージをネットから直接ダウンロードできたり、操作がしやすそうだったりしたのでKimchiを導入することにしました。

動作環境

KVMを始めとする仮想化環境が構築されている必要があります。インストールしていない場合はLinuxサーバーを再構築した。その5(KVM設定編) を参考にしてインストールしてください。

Kimchiをインストールする

Debian9の場合、CentOSUbuntu Serverに比べ、パッケージの依存性の問題で手順が煩雑になっています。

パッケージをダウンロードする

公式から必要なパッケージをダウンロードします。

$ wget https://github.com/kimchi-project/kimchi/releases/download/2.5.0/wok-2.5.0-0.noarch.deb
$ wget http://kimchi-project.github.io/gingerbase/downloads/latest/ginger-base.noarch.deb
$ wget https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.noarch.deb

この記事を書いている時点では2.5.0が最新版ですが、各自の状況に合わせて書き換えてください。

依存性問題を解決する

kimchiに必要なパッケージの一つに

libvirt-bin

がありますが、Debian9ではパッケージが分割されて

libvirt-daemon-system
libvirt-dev
libvirt-clients

に分割されています。普通にインストールするとlibvirt-binの依存性が解決できないのでエラーとなりインストールできません。今回はパッケージの一部を書き換えてインストールできるようにします。

まず、作業用のディレクトリを作成します。

$ mkdir tmp
$ cd tmp

次に、パッケージを展開します。

$ ar p ../kimchi-2.5.0-0.noarch.deb control.tar.gz | tar -xz

展開したファイルの中に

control.in
control

があり、これが必要なパッケージを指定しています。この2つのファイルを適当なエディタで開き、

libvirt-bin,

libvirt-daemon-system,
libvirt-dev,
libvirt-clients,

に書き換えます。保存後、パッケージをまとめます。

cp ../kimchi-2.5.0-0.noarch.deb ../kimchi-2.5.0-0~4deb9.noarch.deb
tar czf control.tar.gz *[!z]
ar r ../kimchi-2.5.0-0~4deb9.noarch.deb control.tar.gz

以上でパッケージの書き換えは終了です。

パッケージのインストール

ようやくパッケージをインストールできるようになったので、導入していきます。

$ sudo apt-get install nginx-full
$ sudo dpkg -i wok-2.5.0-0.noarch.deb 
$ sudo apt-get install -f
$ sudo dpkg -i ginger-base.noarch.deb
$ sudo apt-get install -f
$ sudo dpkg -i kimchi-2.5.0-0~4deb9.noarch.deb
$ sudo apt-get install -f

これでインストール自体は終了です。一応再起動しておきます。

$ sudo reboot

今回はここで終了です。次回は、UFWの設定とバグパッチの適用を行います。

参考文献

I got WOK & KIMCHI working on Debian 9 – Here’s how I did it

Linuxサーバーを再構築した。その5(KVM設定編)

f:id:PiBVT:20180213221038j:plain

KVMとは

KVMとはKernel-based Virtual MachineでLinuxカーネルに組み込まれた仮想化基盤ことです。要は便利な仮想化ソフトウェアという感じです。今回はサーバー上で複数のマシンを稼働させるために利用します。

KVMをインストール

KVM本体と関連パッケージをすべて一括でインストールします。

$ sudo apt install qemu-kvm libvirt0 virt-manager bridge-utils

インストール後再起動します。

$ sudo reboot

ユーザーをlibvirtグループに追加し、仮想マシンの作成等の操作がroot権限なしでできるようにします。

$ sudo gpasswd libvirt -a hoge

ネットワークの設定

ゲストOSの通信は以下の2つの方式によって経由されます。

NAT方式

ブリッジ方式

NAT方式はホストのファイアーウォールを介することになるので、セキュリティ的には便利なのですが、ゲストの対外通信が面倒なことになります。ブリッジ方式はその正反対で、ゲストの通信はファイアーウォールを全く介さないので、物理マシンとほぼ同じように扱うことができます。

ブリッジ方式で通信するためのブリッジを作成します。

/etc/network/interfaces

をroot権限で開きます。 第一回で設定した固定IP設定を変更し、以下のようにします。

auto enp0s25
iface enp0s25 inet manual

iface br0 inet static
  address 192.168.100.100
  network 192.168.100.0
  netmask 255.255.255.0
  broadcast 192.168.100.255
  gateway 192.168.100.1
  dns-nameservers 192.168.100.1 8.8.8.8
  bridge_ports enp0s25
  bridge_stp off
auto br0

ファイアーウォールにブリッジ経由の通信をスルーする設定を追加しておきます。

/etc/default/ufw

をroot権限で開きます。

DEFAULT_FORWARD_POLICY="DROP" を DEFAULT_FORWARD_POLICY="ACCEPT" に変更

以上で設定は終了です。最後に再起動して完了です。

今回で再構築は終了です。今までCUIベースで仮想マシンを管理していたのですが、結構大変なのでWebGUIで管理できるようにしたりするつもりです。他にもNextCloudというプライベートクラウドも気になるので使ってみたいです。

参考文献

Debian 9: 仮想化のKVMをインストールする Debian 9: bridgeインターフェースの設定 UbuntuでKVMを構築して、ファイアーウォール(ufw)を有効化する

Linuxサーバーを再構築した。その4(Samba設定編)

f:id:PiBVT:20180212234250j:plain

Sambaとは

SambaはSMBプロトコルのファイルサーバーでWindowsUnix間でのファイル共有を可能にするソフトウェアです。

今回は個人用にファイルサーバーを立てるので、複数人での共有については配慮してません。

Sambaをインストールする。

サーバーにSSHして

$ sudo apt install samba

次に基本的な設定を行います。

/etc/samba/smb.conf

をroot権限で開き、

;    interfaces = 127.0.0.0/8 eth0 を interfaces 127.0.0.0/8 192.168.100.0/24
;    bind interfaces only = yes を bind interfaces only = yes

とすることで、アクセス可能な範囲をLAN内に限定することができます。

共有ディレクトリの設定

サーバーのホームディレクトリで

mkdir share
chmod 770 share

と、共有対象のディレクトリshareを作成します。

次に、共有設定をするために再び

/etc/samba/smb.conf

をroot権限で開き、ファイルの最後に

[Share]
    path = /home/hoge/share
    writable = yes
    create mode = 0770
    directory mode = 0770
    guest ok = no
    valid users = hoge

を追記します。

path は共有対象のディレクトリのフルパス

writableは書き込み許可

create mode,directory mode はアクセス権限の設定

guest ok はゲストの接続

valid usersはアクセス可能なユーザー名

となっています。 今回はインストール時に登録したユーザーhogeのみがアクセス可能となるようにしています。

そして、アクセス時専用のパスワードを設定します。

sudo smbpasswd -a hoge
New SMB password:(新規にパスワードを設定する)
Retype new SMB password:(上と同じものを入力)

とすることで登録ができます。 最後にSambaサービスを再起動し、ファイアーウォールに通信許可を追加します。

sudo systemctl restart smbd
sudo ufw allow samba

以上でサーバー側の設定は終了です。

Windowsから接続する

ファイルエクスプローラーを開き、上部のアドレス欄に

\\192.168.100.100\Share

と入力すると、ユーザー名とパスワード入力画面が出てくるので、ユーザー名hogeと登録したパスワードを入力することでアクセスできます。

以上でファイルサーバーの構築は終了です。複数人で異なるアクセス権限の設定等も可能ですが、当人は使う機会が無いので今回はしません。

次回はKVMのインストールと設定を行い、サーバー再構築を終了します。

参考文献

Debian 9 Stretch : Samba : アクセス権付の共有フォルダ作成 : Server World

Linuxサーバーを再構築した。その3(UFW設定編)

f:id:PiBVT:20180211160126p:plain

UFWとは

UFWとはUncomplicated Firewallの略でLinuxにおけるファイアーウォールの一つです。 今回のサーバーは外に公開することになるのでセキュリティを高めるために導入しておきます。

UFWをインストールする

UFWのインストール・設定はDebian 9: UFWでファイアウォール制御 を参考にしました

サーバーにログイン後

$ sudo apt install ufw
$ sudo systemctl start ufw
$ sudo ufw enable
$ sudo ufw logging on

UFWの有効化、ログ取得と、自動起動の設定が完了します。

UFWを設定する

今はSSHだけできればいいので、前回SSH用に設定した18500番ポートでの通信を許可します。

$ sudo ufw allow 18500/tcp

以上で、外部からの18500番ポートに対する通信以外はすべて遮断されます。

Webサーバーなどを立てた場合はその都度、UFWの設定に追加していくことになります。

次回はSambaのインストールと設定を行います。

参考文献

Uncomplicated Firewall Debian 9: UFWでファイアウォール制御

Linuxサーバーを再構築した。その2(SSH設定編)

f:id:PiBVT:20180210221118p:plain

SSH設定について

今回はサーバーにDebianをインストールしたので基本的にはSSHでログインし、CUIで作業をすることになります。 SSHでログインをする際、パスワードでログインすることも可能なのですが、セキュリティ的に脆弱なので公開鍵暗号でログインする方法に切り替えます。

作業前に

今回はサーバーのユーザー名をhogeIPアドレスを192.168.100.100として作業します。各自の環境に合わせて変えてください。

PC側の設定

私のメインPCはArch Linuxなので、端末から暗号鍵を生成することができます。 端末から

$ ssh-keygen -t rsa -f debian_server

すると公開鍵と秘密鍵の2つが生成されます。

debian_server  <= 秘密鍵。外部に漏らしてはいけない
debian_server.pub  <= 公開鍵。サーバーに登録する。流出しても多分大丈夫

秘密鍵を.sshフォルダに移動します。

$ mv debian_server ~/.ssh
~/.ssh/config

vimなどのエディタで開き、以下の内容を追記します。(ファイルが存在しない場合は作成してください)

Host DebianServer
           User hoge
           HostName 192.168.100.100
           IdentityFile ~/.ssh/debian_server

Server側の設定

公開鍵をサーバーに送信します。

$ scp debian_server.pub hoge@192.168.100.100:~/

サーバーにSSHでログインします。ログイン後

$ mkdir .ssh
$ chmod 700 .ssh
$ cat debian_server.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ rm debian_server.pub

SSHの設定ファイルを編集します。

/etc/ssh/sshd_config

vimなどのエディタで開きます(root権限で開きます)。

#PubkeyAuthentication yes のコメントアウトを削除し、 PubkeyAuthentication yes

とし、保存後、SSHのサービスを再起動します。

$ sudo systemctl restart sshd

PCから登録したエイリアスSSHできることを確認します。

$ ssh DebianServer

ログインできない場合、何らかの設定が間違っているので修正してください。 ログイン後、パスフレーズでのSSHログインを禁止します。

/etc/ssh/sshd_config

の設定ファイルを再び開き、

#PermitRootLogin prohibit-password を PermitRootLogin no に変更
#PasswordAuthentication yes を PasswordAuthentication no に変更

保存後、SSHサービスを再起動

$ sudo systemctl restart sshd

PCからSSHでログインできることを確認します。

SSHのポートを変更する。

セキュリティを高めるために22番ポートから適当な使っていないポートに変更します。 今回は18500番ポートに変更します。

サーバーにログイン後、

/etc/ssh/sshd_config

をrootで開き、

#Port 22 を Port 18500

に変更します。保存後SSHサービスを再起動し、

sudo systemctl restart sshd

サーバー側での作業は終了です。 PC側では、さっき登録したエイリアス

Port 18500

を追記します。こんな感じになります。

Host DebianServer
           User hoge
           HostName 192.168.100.100
           IdentityFile ~/.ssh/debian_server
           Port 18500

保存後、SSHでサーバーにログインできることを確認し、終了です。

次回は、ファイアーウォールUFWのインストールと設定をします。

参考文献

SSHの鍵認証設定

Linuxサーバーを再構築した。その1(OSインストール編)

f:id:PiBVT:20180209220401j:plain

事の発端

以前はCentOSのサーバーを建てていたのですが、USBメモリにインストールしていたせいかパッケージの更新に失敗するようになったのでDebianに入れ直します。(KVM主体で利用するので必要最小限のパッケージしか導入しないDebianにしました)

対象のサーバー

有名な格安サーバーである富士通さんのTX100 S3です。 ヤフオクで10kで購入しました。 CPU:Intel Pentium CPU G620 @ 2.6GHz

メモリ:8GB

HDDは250GB×2です。これをRAID1構成で運用します。

入れるOS

安全安心な老舗のDebian 英語苦手なのでDebian JP Projectからダウンロードしました。 バージョンはDebian9.3(Strech)です。

早速インストール

USBメモリ経由でインストールするのでDebianのISOイメージをUSBメモリに書き込むためにRufusを利用しました。 書き込んだUSBメモリからブートしインストールします。RAID1の設定等はここを参考にしました。

インストール後の初期設定

インストール後、ip -f inet addrでipアドレスを調べ、SSHでログインします。

固定IPアドレスの設定

Linuxで固定IP設定(設定ファイル・コマンド)を参考に設定します。

/etc/network/interfaces

vim等のエディタで(rootで)開き、

iface enp0s25 inet static
   address 192.168.1.22 (サーバーのIPアドレス)
   netmask 255.255.255.0
   gateway 192.168.1.1
   dns-nameservers 192.168.1.1 8.8.8.8

と書き換えます。 ここでいったんrebootします。

sudoをインストールする

Debianインストール時にSSHサーバーと標準ユーティリティだけインストールしたのでsudoが入ってません。 毎度suするのも面倒かつ危険なのでsudoをいれて一般ユーザーでもroot権限を行使できるようにしておきます。

# apt install sudo 

でsudoをインストール後、

# visudo

で設定ファイルを開きます。

(ユーザー名) ALL=(ALL:ALL) ALL

を追記すれば完了

今回はここまでです。 次回はSSHの公開鍵暗号の設定を行います。

参考文献

DebianでRAID1

Linuxで固定IP設定(設定ファイル・コマンド)

【Debian 8 Jessie】sudoコマンドをインストールする

(あと、ブログ始めました...)