Fortran 入門した

仕事ではCentOSを使うことが多いけど、学習環境はDebian8で用意した。 処理系はGNU Fortran

# apt-get install -y gfortran

Vimの設定

% mkdir -p ~/.vim/ftplugin
% cat ~/.vim/ftplugin/f90.vim
"タブを半角スペースに置き換える
setl expandtab
"タブのインデント幅を4にする
setl tabstop=4
"自動インデントのインデント幅を4にする
setl shiftwidth=4
"キーボードのタブを押したときのスペースの数
"0に設定するとtabstopで設定した値と揃える
setl softtabstop=0
"保存時に行末のスペースを除去
autocmd BufWritePre * :%s/\s\+$//ge
% cat ~/.vimrc
syntax on
filetype plugin indent on

Hello world

% cat <<EOF > hello.f90
> program hello
>   print *, "Hello, world."
> end program hello
> EOF
% gfortran hello.f90
% ./a.out
 Hello, world.

気の向く限りしばらく勉強してみます。

Raspberry Pi2にGo1.6をインストール

Raspberry Pi2にGo1.6を入れようと思ったところ、ARM向けバイナリがgolang.orgでは提供されていなかったのでビルド手順をメモ。

まずは普通にソースをビルドしようとする。

$ wget https://storage.googleapis.com/golang/go1.6.src.tar.gz
$ tar zxvf go1.6.src.tar.gz
$ cd go/src
$ ./all.bash
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /home/pi/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

Go1.5からはセルフホスティングされているので、Go1.6のビルドにGo1.4以上が必要。しかしaptにはGo1.3.3しか入ってない。

$ sudo apt-cache show golang
Package: golang
Version: 2:1.3.3-1
(以下略)
...

なので、一度Go1.4をビルドしてインストールし、更にそれを使ってGo1.6をインストールすることになる(二度手間...)。

ここではGo1.4系列の最新版である1.4.3を使う。

$ sudo apt-get install -y golang
$ wget https://storage.googleapis.com/golang/go1.4.3.src.tar.gz
$ mkdir ~/go1.4
$ tar -C ~/go1.4 -zxvf go1.4.3.src.tar.gz
$ mv ~/go1.4/go/* ~/go1.4/
$ rmdir ~/go1.4/go/
$ cd ~/go1.4/src
$ ./all.bash

混乱を避けるためaptでインストールしたGo1.3を除去する。

$ sudo apt-get purge golang
$ sudo apt-get autoremove

念のためバージョンを確認する。

$ echo 'export PATH="$PATH:$HOME/go1.4"' >> ~/.bashrc
$ go version

Go1.6のインストール

$ ~/go/src  # go1.6
$ echo 'export GOROOT_BOOTSTRAP="$HOME/go1.4"' >> ~/.bashrc
$ echo 'export PATH="$PATH:$GOROOT_BOOTSTRAP"' >> ~/.bashrc

all.bashを覗くと"all.bash must be run from $GOROOT/src"と書いてあるので、それに従う。

$ echo 'export GOROOT="$HOME/go"' >> ~/.bashrc
$ echo 'export PATH="$PATH:$GOROOT"' >> ~/.bashrc

$ cd $GOROOT/src
$ ./all.bash

以上で出来たはず。 (夜遅くまでかかってしまったので誤植等があれば後で直す)

ubuntu15.10にnginx + Perl環境を構築(plenv+cpanm+carton)

VirtualBoxへのインストール前に、[設定]→[ネットワーク]の項目で

  • アダプタ1:NAT
  • アダプタ2:ホストオンリーアダプター

に設定しています。

インストール時、OpenSSHだけインストールにチェックを入れています。

インストール後、systemd-networkdで

  • アダプタ1(enp0s3)
  • アダプタ2(enp0s8)

DHCPでアドレスを割り当てます。

$ sudo systemctl enable systemd-resolved.service
$ sudo mv /etc/resolv.conf{,.orig}
$ sudo mkdir /run/systemd/resolve
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ sudo touch /etc/systemd/network/dhcp.network
$ sudo vi /etc/systemd/network/dhcp.network
[Match]
Name=enp*

[Network]
DHCP=yes

(再起動したらsudo systemctl restart systemd-networkdをしないといけない、要調査)

/* 追記

再起動後にもenp0s8にDHCPでIPを割り当てるためには、

dhclientを止めて、systemd-resolvedとsystemd-networkdを有効にします。

$ sudo systemctl status | grep -2 dhc

ifup@enp0s3.serviceというサービスが見つかるので無効にします。

$ sudo systemctl disable ifup@enp0s3.service
$ sudo systemctl enable systemd-resolved.service
$ sudo systemctl enable systemd-networkd.service
$ sudo reboot

以上で再起動後、2つのネットワークアダプタにIPが割り振られます。

追記ここまで*/

Windowsからsshクライアントを使ってログイン(Cygwin)

(enp0s8に192.168.56.101が割り当てられているものとします)

$ ssh username@192.168.56.101
  • gitのセットアップ

ubuntu 15.10 serverではgitが最初から入っていたので、

git configでユーザー名などを登録します。

(もし無ければapt-get install gitをしてください)

$ git config --global user.name "YOURNAME"
$ git config --global user.email youraddress@example.com
//以下必要に応じて
$ git config --global url."https://".insteadOf "git://"
$ git config --global http.proxy "http://proxy.example.com:8080/"
$ git config --global https.proxy "http://proxy.example.com:8080/"
  • plenvのインストール

https://github.com/tokuhirom/plenv#installation

plenvのGithubページに書いてあるインストール方法に従います。

plenv installするときに、makeやらgccやらが必要になるので、build-essentialで一気に入れてしまいます。

$ sudo apt-get install -y build-essential

注意書きにもありますが、ubuntuは~/.profileに記述するという点に注意しましょう。

$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv
$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.profile
$ echo 'eval "$(plenv init -)"' >> ~/.profile
$ exec $SHELL -l
$ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/

ここでは5.20.2をインストールします。

$ plenv install 5.20.2
$ plenv global 5.20.2
$ plenv versions
$ plenv rehash
  • cpanmをインストール
$ curl -L https://cpanmin.us | perl - App::cpanminus
$ plenv rehash
  • cartonをインストールします。

CartonはRubyでいうBundlerに相当します。

$ cpanm --local-lib=~/perl5 local::lib
$ cpanm Carton
$ plenv rehash
$ mkdir psgi && cd psgi
$ echo "requires 'Task::Plack';" >> cpanfile
$ carton install

ここで試しにhello.psgiを作成します。

$ vi hello.psgi
#!/usr/bin/env perl

use strict;
use warnings;

my $app = sub {
  my $env = shift;
  # アプリケーションの処理
  return [200,
    ['Content-Type'=>'text/plain'],
    ["Hello World\n"]
  ];
};
$ carton exec plackup hello.psgi

ホスト側(Windows)のブラウザでhttp://192.168.56.101:5000にアクセスして、Hello worldが返ってくることを確認します。Ctrl-Cで終了します。

  • nginxをリバースプロキシにする

普通にaptで入れます

$ sudo apt-get install -y nginx-full
$ sudo cp -p /etc/nginx/nginx.conf{,.orig}
$ sudo pkill nginx

nginx.confは

http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Nginx

などを参考に記述します。

$ sudo vi /etc/nginx/nginx.conf

http {
...

  upstream myapp {
    server 127.0.0.1:5000;
  }
  server {
    listen 8080;
    server_name localhost;
    location / {
      proxy_pass http://localhost:5000;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }

...
}

nginxを再度起動し、PSGIサーバ(ここではPlack)を起動します

$ sudo nginx
$ carton exec plackup hello.psgi

再びホスト側ブラウザから、http://192.168.56.101:8080/ にアクセスし、Hello worldが表示されたら完了です。

  • 補足

一通りの流れを忘れないうちに書きましたが、記事を書きながら動作確認を行っていたので、不正確な点があるかもしれません。

(というか全体的に理解が足りてないので不正確な点が多々ある気がします...)

  • 参考

ゆきろぐ: systemd-networkdでのネットワーク設定

第24回 PSGI/Plack実践入門―Starman,Starlet,Twiggy,Plack::Middleware,Server::Starter(1):Perl Hackers Hub|gihyo.jp … 技術評論社

PSGI/Plack - Perl Superglue for Web Frameworks and Web Servers

Arch Linuxのインストール

作業したことが溜まってきたのでメモ。

1)インストールメディアの準備 ・ISOイメージのダウンロード

Arch Linuxのダウンロードページから適当に。

https://www.archlinux.org/download/

USBメモリに焼く

WindowsならWin32DiskImagerとかUSBWriterとかを使う。 拡張子をisoからimgに変更しておく。

MacLinuxならddコマンドで

dd if=/home/user/archlinux-2015.07.01-dual.iso of=/dev/sdb bs=512k

とか。/dev/sdbはUSBメモリを認識してる箇所

参考

2.2. インストール USB の作成

・インストール

Installation guide - ArchWiki

細かい箇所が変わってるかもしれないので上記Wikiを見て確認する。

ThinkPad X200へインストールしたときの話

・ディスクフォーマット

partedコマンドを使う。

gptでフォーマットする。

パーティションは/とswapのみ。

set 1 boot onなどとすると、/をブートパーティションに指定できる

  # parted /dev/sda
  mklabel gpt
  p
  mkpart
  (/とswap用領域を作る)
  set 1 boot on (/パーティションの方)
  exit
  # mkfs.ext4 /dev/sda1
  # mkswap /dev/sda2
  # mount /dev/sda1 /mnt

・ネットワークへ接続する。

無線環境しかなかった。

  # wifi-menu
  (SSIDを確認して選択し、パスワードを入力)
  # ip addr

pacmanの設定

/etc/pacman.d/mirrorlistを編集する。

jpミラーがtsukubaしかない(?)ようなので、コピーしてミラーURLの一番上に持ってくる。優先順位も2.2を0.2に書き換える。

/etc/pacman.confを編集する。

  # cat /etc/pacman.d/mirrorlist | grep tsukuba >> /etc/pacman.conf
  # vi /etc/pacman.conf
  (追記したミラーURLをcoreとextraの項目に追加する)

・インストール

Arch Wikiのコマンドに従う。

chrootしたあとにpacmanでdialog(wifi-menuに必要)とgrubをインストールする

  # pacman -S dialog grub

ブートローダ

boot loaderは以下のようにインストールする

# grub-install --target=i386-pc --recheck --force --debug /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

--forceは要らないはずなのだけど、付けないと失敗した

exitでchrootを抜けたあと、umount /mntしてreboot (poweroffにしてUSBメモリを抜く)

リブートしてログインしたら、wifi-menuでネットワークへ接続する

以上

Debian7にDjango1.8をインストール

Debian8が今週末に出ますが、Debian7でDjangoインストールする手順をまとめました。

メモなので分からないところはググってください。

環境

# cat /etc/debian_version
7.8

Python3インストール

# apt-get install -y python3
# python3 -V
Python 3.2.3

pipインストール

# wget https://bootstrap.pypa.io/get-pip.py
# python3 get-pip.py

virtualenvインストール

# pip install virtualenv

一般ユーザへ切り替え

# su - user
$

Django作業用ディレクトリの作成

$ mkdir django_app
$ cd django_app

virtualenv 仮想環境のアクティベート

(こうすることで、Python等のライブラリの混在を防げます)

$ virtualenv env1
$ cd env1
$ source bin/activate
(env1)$

Django1.8のインストール ($ pip search django もしくはPyPIでバージョンを確認)

(env1)$ pip install django==1.8

virtualenv 仮想環境を抜ける場合は

(env1)$ deactivate
$

参考:

Python Django入門 (1) - Qiita

Installation — pip 6.1.1 documentation

Quick install guide | Django documentation | Django

VirtualBoxにCentOS6をインストール

Windows上のVirtualBoxCentOSをインストールします。

https://www.virtualbox.org/からVirtualBoxをインストールしたら、[新規]ボタンを押して仮想マシンの作成をします。 名前などは適当でよいですが、CentOS6の場合はメモリを512MB以上割り当てないとインストールが出来なかったと思います。(仮想ディスクは最低でも2GBぐらい必要だったかも。私は16GB割り当てました)

仮想マシンにOSをインストールする前に、[設定]ボタンを押します。 [システム]からフロッピーの優先順位を3番目に下げ、チェックを外します。 (CD/DVD,HDD,フロッピーの順になる)

[ネットワーク]を選び、[アダプタ2]のタブで、[ネットワークアダプターを有効化]にチェックを入れます。そして、[割り当て]をホストオンリーアダプターにします。

(NATだけですと、ホストOS(Windows)とネットワークアダプターを共用するので、VirtualBox内にサーバーを建ててもホストOSから見ることが出来ません。(ポートフォワーディングをすれば見れるかも?[未検証]))

OKを押して設定を保存。ゲストOS(CentOS)をインストール。

インストールが終わったら、ゲストOSのネットワークを有効にします。 ONBOOTをnoからyesにする。 eth0とeth1両方で行いましょう。

#vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=YES

保存したらifconfigでIPアドレスを確かめましょう。 また、openssh-serverがインストールされているか念のため調べましょう。

# ps aux | grep sshd
なければ
# yum update -y && yum install openssh-server -y

次に、SSHクライアント(PuTTY)を使って、eth1からログインします。

PuTTY Download Page

またzipファイルを使いました。

PuTTYを起動したらeth1のIPアドレスを指定します。

PuTTYからログイン出来たらひとまず完了です。 あとはssh-keygenコマンドで公開鍵ペアをつくり、/etc/ssh/sshd_configからrootパスワード認証を無効にしましょう。

WinSCPでISOイメージをダウンロードする

Windows上の仮想環境(VirtualBox)にLinux環境を整える前準備として、LinuxのISOイメージをダウンロードします。

最近のブラウザは優秀なので、普通にブラウザを使ってISOイメージをダウンロードしてもよいのですが、Linuxへファイルをアップロードするときにも使えるのでFTPクライアント(WinSCP)を使います。 (少しぐらいなら通信が途切れても途中からダウンロードを再開してくれるから、というのも理由です)

WinSCP :: Download

インストーラーでも良いのですが、私はzipファイル版(Portable executables)を選びました。 zipファイルを展開したらWinSCP.exeを起動します。

f:id:onbrs:20150218220711p:plain

こんな感じで接続先サーバーの設定をします。(プロキシ環境下の場合は[Advanced]から設定をしてください)

設定を保存したらLoginボタンで接続をします。

欲しいISOイメージと、対応するチェックサムのファイルを入手します。

ISOイメージをダウンロードしたら、ハッシュ値計算ソフトでISOファイルが壊れていないか確認します。

「Calculate File Hash」ファイルのハッシュ値を計算するソフト

壊れていないことを確認出来たら完了です。