読者です 読者をやめる 読者になる 読者になる

script day.log

大学生がなんとなく始めた、趣味やら生活のことを記録していく。

Debian jessieをアップデートしました

タイトルの通り、Debianのアップデートしました。

Debian jessie 8.7.1→8.8

手順は以下の通り。

$ sudo apt update

$ sudo apt upgrade

$ sudo apt dist-upgrade

$ sudo apt-get autoclean

$ sudo apt-get autoremove

再起動

$ uname -a

バージョンを確認する

$ cat /etc/debian_version
8.8

アップデート完了ですね

GWのこと

GW中は実家のある福岡県の方へ帰省していました。(5/2~5/6)

ある用事があったので…

その用事とは、クルマを納車する用事でした。

前はRX-8(前期)に乗っていたのですが、諸事情により、

今は自由に乗れないので、新しいクルマを買うことに決めました。

次のクルマはMR-S(前期)です。

1tを下回る軽量ボディで、理想的な駆動レイアウトと言われるMRなどに惹かれ、

このクルマに決めました。

納車した日に、小倉のフェリーターミナルや皿倉山の方にドライブに行ってきました!ハンドリングの良さや、運転のしやすさが非常に伝わってきました。

人によっては1ZZ-FEは面白くないという方もいらっしゃいますが、

私は街乗りが多いので非常に乗りやすさを感じました。

前のクルマのエンジンが特殊だったもので、特にそう感じました。

f:id:makose3p1229:20170511143704j:plain

結論

人生1度は2シーター&オープンカーに乗っておくべきかと思います。

さらにMR+MTだとなお良し。

 


 

GW最終日(5/7)はサニーTSUBAKIでPRINCEさんがイベントを開催していたので、

参加しに行ってきました。

www.prince-racing.com

中でも、フェラーリ458スペチアーレがすごかったです(小並感。

 

f:id:makose3p1229:20170511143726j:plain

f:id:makose3p1229:20170511143724j:plain

f:id:makose3p1229:20170511143720j:plain

f:id:makose3p1229:20170511143746j:plain

 

さらにみきゃんFIT&CR-ZS2000日本一決定戦で

活躍しているS2000が並んでいました。

 

f:id:makose3p1229:20170511143730j:plain

f:id:makose3p1229:20170511143740j:plain

f:id:makose3p1229:20170511143744j:plain

 

そして、それを見に来るクルマ好きの方々のクルマもすごかったです(小並感。

 

f:id:makose3p1229:20170511143752j:plain

 

ということで、今年のGWはかなり充実したものに出来ました。

証明書の自動更新(cron)

cronを使って、Let's Encryptで発行した証明書の更新を
自動化しようって話です(それだけ)。
理由は証明書の有効期間が90日しかないので、
忘れた頃に更新しなさいとメールがやってきます。
それを防ぐためです。

cronの設定

crontab -l

これで、まず設定されているcronを確認する。
この場合、各ユーザーが設定してあるcron設定しか表示されないため、
rootで設定してあるcron設定はrootで確認する必要がある。
"-u"でユーザー指定すれば、問題ないが…
次にエディタでcronの設定を記述していく。

crontab -e

エディタが起動したら、次のルールで記述する。

分 時 日 月 曜日 <実行コマンド>


固定指定

00 15 * * * echo "hello."

間隔指定

*/5 * * * * echo "hello."

複数指定

5,10 2 * * * echo "hello."

範囲指定

5 2-5 * * * echo "hello."

今回は、毎月1日のAM04時に設定。

00 04 01 * * /bin/systemctl nginx stop && /usr/local/letsencrypt/letsencrypt-auto renew --force-renew && /bin/systemctl nginx start

cron設定したのに、動かないよ!ふえぇ…って方へ

  1. crondは動いているかな?
  2. 実行ファイルの権限は正しいですか?
  3. cronのログを確認してね

まとめ

crontab [ -u ユーザ名 ] { -l | -r | -e }
-u: cronを設定するユーザーを指定
-l: cronを一覧で表示
-r: cronの設定を全消去
-e: cronを設定するエディタを起動する
ちなみに私はcronのことをコロンと呼んでいました。実際はクロン、クーロン、クローンだったりするらしいです。

Vagrant + VirtualBox on Windows10

VagrantVirtualBoxを使ってWindows上に簡単に仮想マシンを構築します。
これを導入したからといって、環境の差異による不具合が最小限に抑えられるよ!
といった意識の高い目的より簡単に仮想マシンを構築したかった方が主な目的かも…

用語は各々でお願いします(完全には理解できてない)。

インストール手順

Vagrant
https://www.vagrantup.com/downloads.html

VirtualBox
https://www.virtualbox.org/wiki/Downloadshttps://www.vagrantup.com/downloads.html

当時はVagrant1.9.3、virtualBox5.1.18でした。

上記URLよりインストーラをダウンロードして、インストールします。
インストール終了後、PCを再起動します。

再起動後、コマンドプロンプトでインストール確認。
バージョンが表示されていれば問題ありません。

>vagrant -v
Vagrant 1.9.3

Cドライブが容量が少ない方へ

ここで、私の場合はCドライブにあったVirtual VMsと.vagrant.dをDドライブに移動させました。Cドライブを圧迫させるわけにはいかなかったのです。お金がないのでSSDも小容量でしたし…

まずはVirtual VMsの移動方法ですが、VirtualBoxマネージャーを起動し、
ファイル>環境設定をクリックします。そして一般>デフォルトの仮想マシンフォルダーを容量に余裕のあるフォルダに変更します。変更後のフォルダのアドレスは把握しておいてください。

次に.vagrant.dの移動ですが、まず容量のあるドライブに.vagrant.dのデータを移すフォルダを作成し、コピーします。
※移動前のフォルダを削除するより、移動後のフォルダで正常に動作することを確認してから移動前のフォルダを削除するほうが安全でしょう
次に環境変数の設定を行います。
スタートボタンを右クリック>システムを選択する。
システム詳細設定を選択する。
環境変数を選択する。
ユーザ環境変数を追加したい場合は上の新規追加を、システム環境変数を追加したい場合は下の新規追加を選択する。
変数名はVAGRANT_HOME
変数値には移動したフォルダまでのアドレスを指定する。

以上で移動は完了です。

コマンドプロンプト上でDドライブに移動したくてcdコマンド使おうとしたんですけど、移動できなかったので、調べてみると、

>D:

でイイみたいですね。
さあ、本題に戻ります。

仮想マシン構築

Boxを見つける

以下でインストールするBoxファイルを見つけてくる。
https://atlas.hashicorp.com/boxes/search
検索結果一覧でBox名をクリックすると、以下のようにプロバイダに応じて実行すべきvagrantコマンドが記載されているので、こちらを後で実行します。

virtualbox
Hosted (430 MB)
vagrant init bento/centos-7.3; vagrant up --provider virtualbox

フォルダを作成

Vagrant専用フォルダを作成する。

>mkdir C:\Vagrant
>cd C:\Vagrant

仮想マシン用のフォルダを作成する。

>mkdir centos7.3 & cd centos7.3

Vagrantを初期化

先ほど確認したコマンドを実行します。

>vagrant init bento/centos-7.3

centos7.3フォルダにVagrantfileが作成されます。

Vagrantfileを編集

作成されたVagrantfileを適当なテキストエディタで編集します。

…
# Create a private network, which allows host-only access to the machine
# using a specific IP.
 config.vm.network "private_network", ip: "192.168.33.10"
'↑ここのコメントアウト(#)を外す'
…
'↓VirtualBoxのGUIを表示させたい場合以下のようにコメントアウト(#)を外す'
# Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
   config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
     vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
   end

仮想マシンを起動

>vagrant up

仮想マシンの起動時にエラーが起きた方へ

>vagrant up

実行したところ、ブルースクリーンになっちゃったよ~って方は、
もしかしたらHyper-VVirtualBoxが競合してしまっているかもしれません。
Hyper-Vを無効にすれば、おそらく解決すると思います。
スタートボタンを右クリック>プログラムと機能
Windowsの機能の有効化または無効化を選択する。
Hyper-Vを探して、チェックボックスのチェックを外す。
Windowsを再起動すれば OK。

ブートローダーで分ける方法もあります。
以下の内容を管理者権限でコマンドプロンプトで実行。

//ブートエントリのコピー
>bcdedit /copy {current} /d "Windows 10(less Hyper-V)"
エントリは {ea807010-88da-11e5-b8d5-84fe47afc82d} に正常にコピーされました。
//Hyper-Vを無効
>bcdedit /set {ea807010-88da-11e5-b8d5-84fe47afc82d} hypervisorlaunchtype off
この操作を正しく終了しました。
//ブートメニューの編集結果の確認
>bcdedit 

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
…
Windows ブート ローダー //元のブートメニュー項目
--------------------------------
identifier              {current} //現在のデフォルトブート項目
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows 10 //元のブートメニューの表示名
locale                  ja-JP
……<中略>……
bootmenupolicy          Standard

Windows ブート ローダー //新しくコピーして追加したブートメニュー項目
--------------------------------
identifier              {ea807010-88da-11e5-b8d5-84fe47afc82d} //新規作成されたブートメニューを識別するID文字列
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Hyper-Vなし Windows 10 //新しいブートメニューの表示名
locale                  ja-JP
inherit                 {bootloadersettings}
……<中略>……
bootmenupolicy          Standard
hypervisorlaunchtype    Off //このブートメニュー項目ではHyper-Vが無効になる

これでシステムを再起動すれば、ブートメニュ―にHyper-V無効verが追加されるはず…
もし表示されないようなら[Shift]キーを押しながら[スタート]画面の[再起動]メニューを実行する。
するとトラブルシューティングのメニューなどが表示され、そこでも起動するOSを切り替えることができる。

デフォルトではタイムアウト時間が30秒に設定されているため、これを変更する。

>bcdedit /timeout 10
この操作を正しく終了しました。

>bcdedit

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
…
timeout                 10

上記のように表示されていれば、変更完了です。

登録済みBox一覧を表示

>vagrant box list
bento/centos-7.3 (virtualbox, 2.3.4)

仮想マシンにログイン

virtualBoxGUIを表示させている場合はそちらでログインします。
表示させていない場合はTeraTermなどのSSHクライアントでログインします。

接続先ホスト名 192.168.33.10
接続先ポート 22
ユーザー パスワード
vagrant vagrant
root vagrant

Let's Encryptで発行した証明書の更新

メールが届いていたので、なんぞやと思うと、Let's Encrypt様からそろそろ証明書の更新をしないといけないよ!って言われたので、更新した。
以下、メール本文

Your certificate (or certificates) for the names listed below will expire in
19 days (on 06 May 17 04:24 +0000). Please make sure to renew
your certificate before then, or visitors to your website will encounter errors.

更新作業

$ sudo servise nginx stop #80番ポート使用のため
#letsencrypt-autoがあるディレクトリまで移動
$ ./letsencrypt-auto renew
$ sudo servise nginx start


f:id:makose3p1229:20170416165051p:plain

無事更新されました。
いい加減、cronに設定して、自動更新にしたい。
と毎度毎度言いつつも自動更新設定してない…

*** glibc detected *** double free or corruption

無向グラフを作ることになり、はじめは大っきい配列を用意したらいいじゃん!
って考えていました。まあ当然無駄が多いので、動的に配列を確保したらイイよねって
結論になりまして、ゴリゴリしてたら、エラーが出たので、メモっているわけです。

問題のソースコードがこちら。

void makegraph(void)            /* グラフ作成 */
{
    int i, j;
  
    puts("頂点の数を入力してください");
    if (scanf("%d%*[^\n]", &n) != 1)
    {
        n = 0;  return;
    }

    //graphのメモリ動的確保
    int **graph;
    graph = malloc(sizeof(int *)* n);
    for(i=1;i<=n;i++){
        graph[i] = malloc(sizeof(int) * n-1);
    }
    //graphの初期化
    for(i=1;i<=n;i++){
        for(j=1;j<=n-1;j++){
            graph[i][j] = FALSE;
        }
    }

    puts("各辺の両端点を番号で入力してください");
    while (scanf("%d%d%*[^\n]", &i, &j) == 2)
    {
        graph[i][j] = TRUE;
        graph[j][i] = TRUE; 
    }

    puts("入力データ graph(i,j)=F/T");
    for (i = 1; i <= n; i++) {
        printf("%3d",i);
        for (j = 1; j <= i; j++) {
            if (graph[i][j])
                fputs("  T",stdout);
            else
                fputs("  F",stdout);
        }
        puts("");  
    }
    fputs("   ",stdout);
    for (i = 1; i <= n; i++) printf("%3d",i);
    puts("");

    //メモリの解放
    for (i=1;i<=n;i++) {
        free(graph[i]);
    }
    free(graph);
  
}

実行結果

頂点の数を入力してください
5
各辺の両端点を番号で入力してください
1 5
1 2
2 5
2 3
3 5
3 4
入力データ graph(i,j)=F/T
  1  F
  2  T  F
  3  F  T  F
  4  F  F  T  F
  5  T  T  T  F  F
     1  2  3  4  5
*** glibc detected *** ./a.out: double free or corruption (out): 0x0000000000991040 ***
…

原因はメモリの2重解放かな??
参考文献として、malloc(3)のメモリ管理構造 | VA Linux Systems Japan株式会社
を読んでいたのですが、難しい。

ぶっちゃけ、freeで解放せずプログラム終了したら、エラーメッセージなんて出ないんですよ…
malloc使ったらfreeで解放しないといけないのは、分かっているのです。

もう少し考えてみます…
正直、2次元配列の解放めんどくさいです。
C言語って難しい。

サーバー立てました(OS導入編)

お遊びで、見に行ったパソコン工房で、ジャンクPC(税込み7000円)を買いました。
f:id:makose3p1229:20161014234808j:plainf:id:makose3p1229:20161014232915j:plainf:id:makose3p1229:20161014232931j:plain
それでサーバーの勉強をしようってことで…
まぁ、用途としてはリモートデスクトップがしたいってことでした。
大学の仮想環境では不便に感じることがあったので…
じゃあ、どうやって接続しようか?と考えたときに、思いついたのはSSHとxrdpでした。
そして両方採用しました。
先述の通り、主には大学からの接続を考えていたので、VPNサーバーとなりました。

まずはサーバーの説明から。

初期状態内容
メモリ1.5GB
CPU2.40 GHz
ハードディスク160GB

流石に、メモリが1.5GBなのはきついだろうと思ったので、買いに行こうと思いましたが、
DDR2なんて取り扱っているお店は少なかったです(松山市内)。
電源ケーブルも買わなくてはいけなかったので、ハードオフで売ってる100円ケーブルを
買いに行きました。そこでDDR2メモリ2GB×2(税込み2160円)を発見しました。
f:id:makose3p1229:20161014232932j:plain
ただ、扱いがジャンク品となっておりました。まぁ、現在ではDDR3or4が主流ですもんね…

変更後内容
メモリ4.0GB
CPU2.40 GHz
ハードディスク160GB

しかもこのジャンクPC、購入当時OSが何も入っておりませんでした。
そこでOSは何にしようかな?と考えた結果、CentOS7となりました。
まぁUbuntuは仮想環境(VirtualBox)であるし、BSD系は敷居が高い、
となるとCentOSかなってことで…

では、OSインストールやっていくわに!
今回はインストールディスクを使います。
CentOSのサイトからisoファイルをダウンロードして、ディスクに書き込み。
まずはBIOSの設定で、ディスクからブートできるように設定しておく必要がある。
NECは起動ロゴのときにF2押せばBIOS設定ができるようになります。
そこのBOOTってところでディスクからの起動を最優先とする設定に変更します。
やばいってなったらCtrl+Alt+Deleteで再起動!

それでは、ディスクからCentOS7をインストールしていきます。
f:id:makose3p1229:20161015002238p:plain
Install CentOS7を選択。
少し待つとこのような画面になる。
下の画像はすでに設定済み。
なので、適宜マウスでカチカチして、設定を選んでいってください。
f:id:makose3p1229:20161015002244p:plain
私は、GUI環境にしたかったので、GNOMEDesktopをインストールしました。
なぜなら、CUI環境だけだと、不安なので…
それでも情報工学生なのかなって煽りはしないでください。
自分が一番わかっております。

間違って、最小限のインストールしちゃったよ~(/_;)って人は、Google先生に聞いてください。
「centos7 最小限のインストール gui」で出てきたサイトを参考にすると良いと思います。

インストール設定が完了したら、インストールの開始を押しちゃってください。
そしたらrootのパスワードとユーザーの作成をしてください。
rootのパスワードは大事なので、ある程度しっかり考えたほうがいいと思います。
f:id:makose3p1229:20161015002233p:plainf:id:makose3p1229:20161015002236p:plain

インストールが完了したら、あとはそのまま指示に従って、設定を行ってください。
設定が終了したら、これでOSの導入は終了です。
シャットダウンやログアウトは画面右上の電源マークのところをクリックしたら、
ユーザー名(押すとログアウト表示がされる)や電源マークが出て来るので、
各自ログアウトなりシャットダウンなり、してください。
f:id:makose3p1229:20161015004318p:plain

それではお疲れ様でした!
いやぁ~、1万円サーバーですが、
個人でしかもライトユーザーの私には十分すぎるスペックでした。

次回はSSH、xrdpインストール編です。