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

0から学ぶIT技術

ローカルのドキュメント載せたり、IT関連の催し物の参加報告

MBSDに参加してきました!

大会

f:id:naro3:20161125122154j:plain

こんにちは。

今回は、MBSDという三井物産セキュアディレクション主催のセキュリティコンテストに参加しましたので、その報告となります。

内容は、

  • 参加者に、課題となるオンラインWebサービスのシステム(Linux VM)と、Webアプリケーションのソースコード(PHP)を配布します。
  • このシステムに潜む脆弱性を見つけ、開発者に対して脆弱性を指摘するレポートを作成してください。
  • 各報告には、現象の再現方法・攻撃による想定被害・対策方法の提案を含めてください(報告レポートのフォームを提供しますが、任意に書いてもかまいません)。
  • セキュリティの問題と思われるものであれば、どのような問題を報告してもかまいません。PHPアプリに限りません。OSやネットワークなどにも問題があれば報告してください。画面構成・デザイン・パフォーマンスの問題など、セキュリティに影響のない問題は報告不要です。

というものでした。詳細は下記のサイトで見てください。

 

システムに潜む脆弱性を探し出せ!! MBSD Cybersecurity Challenges|専門学校と経営:専門学校の経営者・広報・就職担当者の情報サイト

 

メンバー

今回は初の1年生のみのチームでした。

1年生4人のチーム。

役割分担は、私がコードを読み、DB、XXS、CSSXXSが、各1人ずつでした。

 

期間

与えられた期間は2週間ほどでした。HTML、CSSPHPは全員触ったことがなかったため、最初の1週間はメンバーの勉強の進捗を管理しながら、配布されたコードを読む作業でした。残りの1週間は攻撃を調べては試しの繰り返しでした。

 

結果

発見できた脆弱性は10個ほどでした、そのほとんどがメンバー1人によるものでした。

私はコードからは1個も発見できなかったです。とても悔しい結果になりました。

 

感想

セキュリティの大会は初参加でしたが、予想以上に難しく、毎日作業しては結果が得られない苦しい日々が続きました。また、リーダーを努めたのも初めてで、自分の指揮能力のなさも痛感しました。自分自身作業が全然できずにいました。しかしメンバーの内の1人がうまくツールを使い、脆弱性を見つけてくれたので、レポートが提出できないという最悪の事態は避けることができました。

その後、先輩と勉強会を開き、先輩の見つけた脆弱性の解説をしていただき、とても勉強になりました。CVEを知ることができたのも大きいです。

HTML、CSSPHPの勉強の機会になっただけでなく、自分自身と深く向き合うきっかけにもなったので、参加して本当によかったです。

 

OSC 2016 Tokyo/Fallに参加してきました

イベント

f:id:naro3:20161107105632p:plain

こんにちは。

今回は、「OSC」というイベントに参加してきた報告となります。

初参加でしたので緊張しました。

また、私自身、経験、知識不足のため理解できてない、勘違いなどしている可能性が大きいことを了承の上、閲覧していただけると幸いです。

また、いただいた資料に乗っているURLなどを貼りますが、掲載を止めて欲しいなどありましたらコメント欄よりお願いいたします。

オープンソースカンファレンス2016 Tokyo/Fall - オープンソースの文化祭!

 

展示部屋が「201」、「202」、「205」、「206」、「303」と別れていましたので、それぞれの部屋で分けて、見たもの話したことについて執筆していきます。

 

201

最初に入ったときのイメージは「Linux関連多いな」です。

blanco Frameworkコミュニティさん

入ってすぐに目が会い、挨拶をして、引き寄せられるようにして、会話が始まりました。内容は「PHPJava向けREST通信ソースコードExcelブックから自動生成」です。懇切丁寧に実装言語によって、依頼会社が違うなど、今の開発の現状を教えていただき、その上で展示品の解説をしていただいたため、とてもおもしろかったです。

igapyon (Toshiki Iga) · GitHub

uedaueo (Tatsuya Ueda) · GitHub

 

東海道らぐさん(おーぷんここん)(おーぷん万葉)

見たことない古いPCに目を引かれていたところに話しかけていただきました。内容は「旧型コンピュータとシンクライアントのためのLinuxディストーションopencoconの展示配布」、「Linuxの新しい日本語入力の形を考えるプロジェクトの紹介と成果物のGenziの紹介」です。自分より先輩のパソコンを触れて、楽しかったです。

会話が弾み、「Linuxをつかっている。」と伝えたところ、「なんでLinux使い始めたの?」と聞かれ、「先輩にWindows消されて、入れられたのが始まりです。」と答えディストーションが「Arch」だとも伝えると、Linuxユーザーさん達に囲まれました。

その後もいろいろ話をしていただき楽しかったです。OSCに対する緊張をといていただいたのも助かりました。

東海道らぐ | Tokaido Linux User Group

 

小江戸らぐさん

囲まれたときに話してもらいました。内容は「関東で活動するLinuxユーザーの会の小江戸らぐと活動報告集の紹介」です。自分もLinuxは初心者で、共感するところが多々あり、新しい刺激を受けるためにも一回参加してみようと思いました。また、活動報告集にも興味があります。

start [小江戸らぐWiki]

 

話せばわかるコンピュータの会さん

謎のカウントマシンが気になり話しかけました。カウントマシンは「おもしろいカウント」でした。前日に小学生が50回ほど連打したそうです。内容は「オープンソースをベースとしたパーソナルIoTの活用方法を実例と共に紹介」です。展示品のことよりも、私が「まだITの勉強を初めて半年だ」と伝えたところ、「C言語のポインタについてじっくりやったほうがいい」などアドバイスを多くいただきました。

BeagleBoneBlackで作りIOT

202

202は自分の知識不足もあり、じっくりとお話できたところはありませんでした。

 

205・206

企業のブースで緊張しました。しかし、学生の札を下げていたこともあり、多くの人の配慮のおかげで楽しめました。企業のブースのためURLの掲載は省略します。

日本アイ・ビー・エム株式会社さん

内容は「IasS型クラウドサービスSoftLayer、PaaS型クラウドサービスBluemix、OpenStackベースのBlue Boxの最新情報の紹介」です。学生の私に対しても丁寧に説明をしてくださり、シールもたくさんいただきました。

日本マイクロソフト株式会社さん

内容は「Windows/Visual Studio/Microsoft Azure関連の展示とデモンストレーション」です。「技術部の人間じゃないので、技術系の話はできない」と前置きから、話ましたが当たり前ですが、私なんかより多くの知識をもっており、いくつか教えてもらいました。LinuxでもVisual Stadio Codeが使えることも初めて知りました。

株式会社DMM.comさん

内容は「メッセージキューの実装NewtMQとDMM.comラボの紹介」です。

株式会社はてなさん

内容は「Mackerelという直感的サーバー監視サービスの紹介」です。学生の私でもわかるようなグラフの推移がリアルタイムでみれて楽しかったです。

特定非営利活動法人エルピーアイジャパンさん

内容は「LinuxOSS-DB、HTML5、ACCEL、OPCELの各技術者認定試験の概要、試験学習の指標となる認定書籍などの紹介」です。LPICのeラーニングなどを話していただきました。LPICは取ろうと考えていたので、興味がでました。

 

303

線型算法同好会さん

内容は「プラレールのみによって論理回路を設計する方法の紹介と実演」です。面白かった!解説もあり、最後の「1 + 1 = 2です。」のおちも面白かったです。

感想

知識がなくても、丁寧な説明をしてくれたり、楽しめました。とりあえず話かければ、勉強になりますし、楽しめますので是非みなさんも参加してみてください。

以上のように緊張しましたが、楽しめました。それも多くの方の気遣いのおかげだったと思います。ありがとうございました。次回も参加したいです。

ArchLinuxの基本的な環境構築

ArchLinux

f:id:naro3:20161030181615p:plain

こんにちは。

今回は、ArchLinuxの基本的な環境構築をします。

また、「ArchLinuxのインストール」の記事からの続きとなります。

今回は、脚注をつけるとすごい量になるため、つけていません。

気になる方は「ArchWiki」などで見てください。

具体的にやる作業は

  • zsh,vimのインストール。
  • GUI(awesome)の設定。
  • 日本語環境の設定。
  • yaourtの設定。
  • ターミナルの設定。
  • 自動起動の設定。
  • フォントの設定。

の7つです。

 

 

最初に行う

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

# pacman -S zsh vim

 

一般ユーザーの作成

ユーザーを作成します。

# useradd -m -G wheel [ユーザー名]

パスワードも設定します。

# passwd [ユーザー名]
# visudo

の中の

Defaults env_keep += "HOME"
%wheel ALL=(ALL) ALL

コメントアウトを外します(行頭の「#」を削除してください)。

 

GUIの設定

Xorgのインストール
# lspci | grep -e VGA -e 3D
# pacman -S [上ので表示されたもの]
(Virtualboxの場合は「xf86-video-vesa」です。)
# pacman -S xorg-server xorg-xinit xterm

 

awesomeのインストール
# pacman -S awesome

設定ファイルも作成します。

# mkdir -p ~/.config/awesome/

# cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
Xinitの設定変更
# cp /etc/X11/xinit/xinitrc ~/.xinitrc
# vim ~/.xinitrc

の中を

# twm &
# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494+51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login
exec awesome

と5行コメントアウトしてください(行頭に「#」を加える)。

同時にawesomeを起動するように、追記します。

 

GUIの起動
# startx

ここまでの設定ができていればawesomeの画面がでるはずです。

追記:

これもうまく行かない人がいるみたいです。私は、以下の方法で起動できるようになったので、参考にしてください。

VirtualBoxにUEFIでインストールしたらXorgサーバーが起動しない時の対処法

 

日本語環境の設定

LANG変数の設定
# vim /etc/locale.conf

の中を

LANG=ja_JP.UTF-8
# LANG=en_US.UTF-8

に書き換えます。

日本語フォントのインストール
# pacman -S otf-ipafont
Fcitxの導入
# pacman -S fcitx-im fcitx-configtool fcitx-mozc
# vim ~/.xinitrc

の中に

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
export DefaultIMModule=fcitx

を追記します。

Fcitxの設定
# fcitx-configtool

f:id:naro3:20161030170419p:plain

画像のように、1番上を「キーボード-日本語」、2番目を「Mozc」とします。

 

yaourtの設定
# vim etc/pacman.conf

の中に

[archlinuxfr]

SigLevel = Never
Server = http://repo.archlinux.fr/$arch

を追記します。

更新します。

# pacman --sync --refresh yaourt

インストールします。

# pacman -S yaourt

 

ターミナルの設定

ここではインストールのみ行います。

# pacman -S xfce4-terminal

 

自動起動の設定

Virtualboxにインストールする方向けの設定

まず、バッテリー表示とネットワークマネージャーのインストールです(Virtualboxにインストールする方は、インストールしなくていいです)。

# pacman -S cbatticon networkmanager nm-applet xfce4-notifyd gnome-keyring

dhcpcdの無効化をします。

# systemctl disable dhcpcd.service

NetworkManagerの有効化をします。

# systemctl enable NetworkManager.service

 

rc.luaの設定
# vim ~/.config/awesome/rc.lua

の中の

terminal = "xterm"


terminal = "xfce4-terminal"

に変更します。

また、

awful.util.spawn_with_shell("fcitx")

(virtualboxにインストールする方は以下も追記)
awful.util.spawn_with_shell("nm-applet")
awful.util.spawn_with_shell("cbatticon")

を最終行に追記します。

 

ログインシェルを「zsh」に変えます。

# chsh -s /bin/zsh

再起動します。

# reboot

ここまでの操作がうまくいっていれば、modkey+returnでxfce4-terminalが起動し、日本語入力もできるはずです。

フォントの設定
# yarourt -S ttf-ricty

xfce4-terminalの「編集」の「設定」の「外観」から「フォント」を選択し、「ricty」を選択し、フォントサイズを設定してください。

 

以上で基本的な環境構築は終わりです。

お疲れ様でした。

archは慣れるまで大変で、自分自身まだ使いこなせているとは言えないですが、それでも個人的にはWindowsより作業はしやすいと思います。

今後は自分の用途に合わせてインストール、設定を行ってください。

 

 

参考にしたサイト

Archwiki各種

LinuxのGUI環境としてウィンドウマネージャーawesomeを使う

Arch Linuxで無線LANに接続する

Arch Linuxに日本語環境を構築する

Arch Linux インストールから awesome 導入まで - Qiita

C言語でゲームを作ってみた!

C

f:id:naro3:20161023065544p:plain
こんにちは。
最近、プログラムに触れてないので授業中に思いついたゲームをC言語で書いてみました。
ゲームジャンルは「ダンジョンRPG」です。が、レベルなどは実装してないので、逃げたもん勝ちです。
「百聞は一見にしかず」ということで、私自身、結構面白いゲームが作れたと思うので、まずはコピペして遊んでみてください。

ソースコードはこちらになります。

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int main(void){

    int go = 0;
    int user = 1;
    char save;
    int much = 1;
    int cnt = 4;
    int GetRandom(int min,int max);
    int random = 0;
    int userhp = 10;
    int enemyhp ;
    int enemyrandom = 0;
    int enemy = 0;
    int act;
    int enemyact = 0;
    int dmg ;
    int esc ;
    int result = 0;
    int error;
    char cmd;

    printf("ゲームスタート!\n");
    printf("あなたは*です。@を目指して進んでください。\n");
    printf("途中には魔物も出現することがあります。頑張ってください。\n");

    char a[21] = " ___________________"; 
    char b[22] = "|_|_|_|_|_|_|_|_|_|@|";
    char c[22] = "|_|_|_|_|_|_|_|_|_|_|";
    char d[22] = "|_|_|_|_|_|_|_|_|_|_|";
    char e[22] = "|*|_|_|_|_|_|_|_|_|_|";
//  printf("%c\n", a[7]);
  
    char now[2] = "*";
    char goal[2] = "@";

    while(much != 0){

        printf("%s\n", a);
        printf("%s\n", b);
        printf("%s\n", c);
        printf("%s\n", d);
        printf("%s\n", e);

        printf("残HP%d\n",userhp); 
        printf("\n");
        printf("左に進む:1\n");
        printf("右に進む:2\n");
        printf("前に進む:3\n");
        printf("後ろに戻る:4\n\n");
  
        printf("どっちに進む?数字を入力してください。:"); 
  //  scanf("%d", &go);
        cmd = getchar();
        while (getchar() != '\n');
        go = cmd &0x0f;

        printf("--------------------------------------------------------\n");

    //  printf("%d\n", go);

        if (go == 1){
            if (user - 2 >= 0){
                error = 0;

                if (cnt == 4){
                    save = e[user];
                    e[user] = e[user - 2];
                    user = user - 2;
                    now[0] = e[user];
                    e[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 3){
                    save = d[user];
                    d[user] = d[user -2];
                    user = user - 2;
                    now[0] = d[user];
                    d[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 2){
                    save = c[user];
                    c[user] = c[user - 2];
                    user = user - 2;
                    now[0] = c[user];
                    c[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 1){
                    save = b[user];
                    b[user] = b[user - 2];
                    user = user - 2;
                    now[0] = b[user];
                    b[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 0){
                    save = a[user];
                    a[user] = a[user - 2];
                    user = user - 2;
                    now[0] = a[user];
                    a[user] = save;
                    much = strcmp(now, goal);
                }

            }else if (user - 2 < 0){
                printf("そっちは壁だよ!\n");
                error = 1;
            }

        }else if (go == 2){
            if (user + 2 <= 20){
                error = 0;

                if (cnt == 4){
                    save = e[user];
                    e[user] = e[user + 2];
                    user = user + 2;
                    now[0] = e[user];
                    e[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 3){
                    save = d[user];
                    d[user] = d[user + 2];
                    user = user + 2;
                    now[0] = d[user];
                    d[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 2){
                    save = c[user];
                    c[user] = c[user + 2];
                    user = user + 2;
                    now[0] = c[user];
                    c[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 1){
                    save = b[user];
                    b[user] = b[user + 2];
                    user = user + 2;
                    now[0] = b[user];
                    b[user] = save;
                    much = strcmp(now, goal);
                }else if (cnt == 0){
                    save = a[user];
                    e[user] = a[user + 2];
                    user = user + 2;
                    now[0] = a[user];
                    a[user] = save;
                    much = strcmp(now, goal);
                }
            }else if (user + 2 > 20){
                printf("そっちは壁だよ!\n");
                error = 1;
            }  

        }else if (go == 3){
            error = 0;

            if (cnt == 4){
                save = e[user];
                e[user] = d[user]; 
                now[0] = d[user];
                d[user] = save;
                much = strcmp(now,goal);
                cnt = cnt - 1;
            }else if (cnt == 3){
                save = d[user];
                d[user] = c[user]; 
                now[0] = c[user];
                c[user] = save;
                much = strcmp(now,goal);
                cnt = cnt - 1;
            }else if (cnt == 2){
                save = c[user];
                c[user] = b[user]; 
                now[0] = b[user];
                b[user] = save;
                much = strcmp(now,goal);
                cnt = cnt - 1;
            }else if (cnt == 1){
                printf("そっちは壁だよ!\n");
                error = 1;
            }
        
        }else if (go == 4){
            error = 0;

            if (cnt == 3){
                save = d[user];
                d[user] = e[user]; 
                now[0] = e[user];
                e[user] = save;
                much = strcmp(now,goal);
                cnt = cnt + 1;
            }else if (cnt == 2){
                save = c[user];
                c[user] = d[user]; 
                now[0] = d[user];
                d[user] = save;
                much = strcmp(now,goal);
                cnt = cnt + 1;
            }else if (cnt == 1){
                save = b[user];
                b[user] = c[user]; 
                now[0] = c[user];
                c[user] = save;
                much = strcmp(now,goal);
                cnt = cnt + 1;
            }else if (cnt == 4){
                printf("そっちは壁だよ!\n");
                error = 1; 
            }  
        }else{
            printf("もう一度入力してね!\n");
            error = 1;
        }

    if (error == 0){
        srand((unsigned int)time(NULL));
        random = GetRandom(1,3);

        if (random == 1){
            printf("なにも起きなかった...\n");
        }else if (random == 2){
            printf("休憩した。体力が2回復した。\n");
            userhp = userhp + 2;
        }else if (random == 3){
            enemyrandom = GetRandom(1,3);
            enemy = 1;
            if (enemyrandom == 1){
                printf("スライムが現れた!\n");
                enemyhp = 3;
                enemyact = 1;
            }else if (enemyrandom == 2){
                printf("ゴブリンが現れた!\n");
                enemyhp = 5;
                enemyact = 3;
            }else if (enemyrandom == 3){
                printf("オークが現れた!\n");
                enemyhp = 7;
                enemyact = 5;
            }
        }
        if (enemy == 1){
            while (enemyhp > 0){
                error = 0;
                printf("残HP%d:",userhp); printf("敵残HP%d\n",enemyhp);
                printf("戦う:1\n");
                printf("逃げる:2\n");
                printf("どうする?数字を入力してください。:"); 
            //  scanf("%d", &act);
                cmd = getchar();
                while (getchar() != '\n');
                act = cmd &0x0f;

                printf("--------------------------------------------------------\n");

                if (act == 1){
                    dmg = GetRandom(1,4);
                    printf("攻撃!敵に%dのダメージ。",dmg);
                    enemyhp = enemyhp - dmg;
                }else if (act == 2){
                    esc = GetRandom(1,2);
                    if (esc == 1){
                        printf("逃げ切れた。\n");
                        break ;
                    }else if (esc == 2){
                        printf("まわり込まれた!\n");
                    }
                }else{
                    printf("もう一度入力してね!\n");
                    error = 1;
                }

                if (error == 0){
                    printf("敵の攻撃!%dのダメージ!!\n",enemyact);
                    userhp = userhp - enemyact;
                }
                printf("--------------------------------------------------------\n");

                if (userhp <= 0){
                    printf("残念!やられてしまった!\n");
                    result = 1;
                    break ;
                }
            } 
            if (result == 1){
                break ;
            }  
            if (act == 1){
                printf("やった!敵を倒した。\n");
            }else if (act == 2){
                printf("次に進もう。\n");
            }
            enemy = 0;
        }
    }
    printf("--------------------------------------------------------\n"); 
  
    }
    if (result == 0){
        printf("おめでとう!クリアしたよ!\n");
    }
    printf("--------------------------------------------------------\n");
    return 0;  
}

int GetRandom(int min,int max)
{
    return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}

軽い気持ちで書き始めましたが、実装したい機能を書こうとして、「stdio.h」しか使ってこなかったのに、3種類も新しくincludeしました。
実装したい機能は全部実装できました。が、やはり素人のプログラム...先輩に書き直してもらったところ、100行減りました(書いている時に、同じ処理ばかり書いてるから、嫌だなと思い調べましたが見つからず、仕方なく全部書いたところがごっそり減ってました)。

今回は、アイデアアルゴリズムはすぐに浮かんだのですが、それを実装するコーディング能力の不足や、知識の浅さを痛感しました。
ですが、やはりプログラミングは楽しいです。
また、何かプログラミングしたときは、執筆します。
ソースコードに対してのアドバイス、質問は大歓迎ですので気軽にコメント欄を活用してください!

*のちほど軽くソースコードコメントアウトで解説いれる予定です。

ArchLinuxのインストール

ArchLinux

こんにちは。

今回は、ArchLinux*1のインストールについて執筆します。

WindowsとArchLinuxのデュアルブート!」の記事からの方も、続きとなります。

 ArchLinuxのUSBインストールメディア*2をまだ持ってない方は、「WindowsとArchLinuxのデュアルブート!」の記事にて、作成をしておいてください(Virtualbox*3にインストールする方は、この記事からで大丈夫です)。

 今回は64bitCPUのPCに、UEFIboot、GRUB*4を使うArchをインストールします。

 

 BIOS設定の変更

virtualboxにインストールする方は飛ばしてください。

まず、USBインストールメディアを起動するには、BIOSでUSBから起動するように設定を変更します。

 

ブートデバイスの優先順位(Boot Device Priority)という項目の中の「USB」という項目が1番上に来るように、並び替えてください(USBを含む項目が複数ある場合があります)。

この際、2番目に「HDD」や「SSD」が来るようにすることをおすすめします。

設定を保存し、BIOSを抜けてください。

以下の記事に詳しく書いてあります。

http://kaeru.tuzikaze.com/usbboot/usb_memory_boot.html

 

Virtualboxの事前準備

Virtualboxにインストールする方のみ行ってください。

まず、ArchのISOファイルをダウンロードします。

Arch Linux - Downloads

から「Japan」の「jaist.ac.jp」を選択し、「archlinux-[日付]-dual.iso」を選択しダウンロードします。

(「.iso」を含む項目の中では一番上にあります。)

次に、Virtualboxをインストールします。

Downloads – Oracle VM VirtualBoxから、ダウンロードして、実行しインストールまで行ってください。

インストール時に変更は特にいらないので、「次へ」連打でいいです。

インストールしたVirtualboxを起動してください。

「新規」を押します。

名前を入力するので「Arch」と入力し、「次へ」を押します。

モリーサイズは「2050M」ほどあればいいかと思います。

ハードディスクは変更せずに「作成」を押します(仮想ハードディスクを作成する)。

ハードディスクのファイルタイプも変更せずに「次へ」を押します(VDI)。

物理ハードディスクにあるストレージも「次へ」を押します(可変サイズ)。

ファイルの場所とサイズも変更せずに「作成」を押します(8.00G)。

新しく「Arch」という項目ができますので、ダブルクリックで起動してください。

起動するとどのISOファイルを参照するか聞かれますので、右のフォルダのアイコンをクリックし、先ほどダウンロードしたArchのISOを選択します。

 

ArchLinuxのインストール

 USBインストールメディアを指して、PCを起動すると、BIOSの設定、USBインストールメディアの作成に問題がなければ、(Virtualboxの方は「Virtualboxの事前準備」に問題がなければ)ArchLinuxが起動します。

f:id:naro3:20161018100657p:plain

1番上の項目を選択します。

うまくいけばCUI*5の画面が出ます。

f:id:naro3:20161018120237p:plain

ここからは、CUIでインストール作業を進めていきます。

まず、日本語キーボード配列にするために

#loadkeys jp106

# setfont lat9w-16

 

パーティションを分ける

次に、パーティション*6を分けます。

Windowsデュアルブートの方はEFIパーティションの操作はいりません。)

#cfdisk

と打ち込むと画面が変わります。

ここでパーティションを分けます。

「Select label type」は「gpt」を選択します。

f:id:naro3:20161026233744p:plain

下の「New」を選択し、新しく作るパーティションのM、Gを入力します。(今回の例なら、512Mと20Gと打ち込みました。)

「Free Space」で「New」を選択し「Enter」

「Partition size」で「512M」と入力し、「Enter」、「/dev/sda1」ができる
「Free Space」で「New」を選択し「Enter」
「Partition size」で「Enter」、「Enter」、「/dev/sda2」ができる
(swapを作成する人は、「FreeSpaceのサイズ」ー「swapに使うサイズ」を入力)
(swap作成する人は以下を行う)
「Free Space」で「New」を選択し「Enter」
「Partition size」で「Enter」、「Enter」、「/dev/sda3」ができる

次に「Type」を選択し、それぞれ「EFI」、「Linux filesystem」、「swap*7」と設定します。

「512Mのパーティション」で「Type」を選択し、「EFI System」を選択。

「1番サイズの大きいパーティション」で「Type」を選択し、「Linux filesystem」を選択。
「20Gのパーティション」で「Type」を選択し、「Linux swap」を選択。
「Write」を選択し、「yes」と入力し、その後「Quit」を選択します。

以上の操作を終えたときの、私の例は

/dev/sda1 512M EFI
/dev/sda2 445.5G LinuxFilesystem
/dev/sda3 20G swap

となっています。

 

virtualboxにインストールの方はswapはいらないかと思います。)

virtualboxにインストールする方はこうなっていればいいです。

/dev/sda1 512M EFI
/dev/sda2 7.5G LinuxFilesystem

追記:
cfdiskでうまく行かない人もいるみたいです。
具体的には、arch-chroot打ったあとにEFIパーティションのマウントがされてないということが確認できてます。そのような方はgdiskでパーティションを分けてください。

# gdisk /dev/sda
Command (? for help):o //新品のドライブや、やり直しをしたい場合にこのコマンドを入力する
Command (? for help):n //このコマンドで新しいパーティションを作る
Permission number: 1
First sector     : Enter
Last sector      : +512M
Hex code or GUID : EF00
Command (? for help):n
Permission number: 2
First sector     : Enter
Last sector      : Enter
Hex code or GUID : 8300
Command (? for help):w
Do you want to proceed? (Y/N)y
 

 

パーティションのフォーマット

まずは、「EFIパーティションのフォーマットです。

# mkfs.vfat -F32 /dev/sda1

次に、「LinuxFilesystem」パーティションのフォーマットです。

# mkfs.ext4 /dev/sda2

最後に、「swap」パーティションのフォーマットです(virtualboxの方は行わない)。

# mkswap /dev/sda3

 

パーティションのマウント

ディレクトリを作成します。

# mkdir -p /mnt/boot

まずは、「EFIパーティションのマウントです。

# mount /dev/sda1 /mnt/boot

次に、「LinuxFilesystem」パーティションのマウントです。

# mount /dev/sda2 /mnt

最後に、「swap」パーティションのマウントです(virtualboxの方は行わない)。

# swapon /dev/sda3

 

インターネットへの接続

元々、有線については有効になっているので、無線を使う方のみ行ってください。

Virtualboxの方は飛ばしてください。

# wifi-menu

接続したいSSIDを選び、接続してください。

 

システムクロックの更新
# timedatectl set-ntp true

 

ミラーの選択
#vi /etc/pacman.d/mirrorlist

の中から、「Japan」のサーバーのうち「jaist」を含むサーバーを一番上に持ってきます。

## Score: 2.0, Japan
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch

viは、入力モードでないときに、「dd」で1行切り取り、「p」で貼り付けですので、うまく使用してください。
また、手動入力する方は、「i」で入力モード、「ESCキー」で入力モード終了、入力モードでないときに「:wq」で保存して終了です。

また、入力モードでないときに「x」で1文字削除もコメントアウトを消すときに便利です。
viはこのあとも使うので覚えておいてください。

 

データベースの更新もしておきます。

# pacman -Syy
ベースシステムのインストール
# pacstrap /mnt base base-devel

少し時間がかかります。

システムの設定

fstab
# genfstab -U /mnt >> /mnt/etc/fstab

 

chroot
# arch-chroot /mnt

タイムゾーン
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc --utc
ロケール
# vi /etc/locale.gen

中の

en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

コメントアウトをはずします(行頭の「#」を消せばいいです)。

変更を有効にします。

# locale-gen

/etc/locale.confも設定します。

# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8
# vi /etc/vconsole.conf

の中に

KEYMAP=jp106
FONT=lat9w-16

を追記します。

 

次回以降のために

インストールしておくと、次回のネットワーク接続がスムーズです。

# pacman -S wireless_tools wpa_supplicant wpa_actiond dialog

ネットワーク接続も有効にします。

# systemctl enable dhcpcd
パスワード設定
# passwd

新しいパスワードの入力を求められますので、入力してください。

GRUB
# pacman -S grub dosfstools efibootmgr

(intel cpu搭載の方はintel-ucodeもインストール)

# pacman -S intel-ucode (intel cpuの方のみ)
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck

# grub-mkconfig -o /boot/grub/grub.cfg
# mkdir /boot/EFI/boot
# cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi

Windowsとのデュアルブートの方のみ行ってください。)

# pacman -S os-prober
# grub-mkconfig -o /boot/grub/grub.cfg

 

再起動
# exit
# umount -R /mnt
# reboot

再起動の際は、インストールメディアを抜いてください。
virtualboxにインストールする方は、再起動後、1枚目の画像の画面になるので1番下の項目の「poweroff」を選択、virtualboxの設定を選択し、「ストレージ」から、archのISOを除去してください。しないとずっとループします!また、設定を選択し、「システム」から「EFIを有効化」にチェックをつけます。)
これでArchのインストールは終わりです。
しかし、まだGUIがなく、日本語入力もできないような環境なので、次回は「ArchLinuxの基本的な環境構築」という名前の記事で、基本的な環境構築をしていきます。

 

参考にしたサイト

インストールガイド - ArchWiki

Arch LinuxをVirtualBox上にインストール - Qiita

Arch Linux インストール から Xfce 快適環境を構築するまで - Qiita

VirtualBoxにArchLinuxをインストールする - Qiita

Arch LinuxとWindows 10をデュアルブートした話 - twitterよりちょっと長いの

*1:Linuxの種類のひとつ。

*2:ソフトウェアをインストールするためのプログラムやデータファイルが収録された記録媒体。

*3:別のx86ベースのホストOS上で、ほとんどゲストOSを修正することなく動作させることができるソフトウェア。

*4:GNUプロジェクトにて開発されている高機能なブートローダー。

*5:文字列を入力とし、文字列が表示されるウィンドウなどのユーザーインターフェイスの様式。

*6:ハードディスクの記憶領域を論理的に分割し、その個々の領域のこと。

*7:補助記憶装置を利用して使用可能なメモリ容量を増やすOSの機能の一つ。

自己紹介・カテゴリー説明

その他

f:id:naro3:20161031100019j:plain

こんにちは。

この記事は、私自身の自己紹介、及び獲得資格などを載せて、記事を書く際の基準、自身のモチベーションUPにつなげるための記事です。

ので、他の記事とは違い解説は脚注はありません。

*随時更新!

 

自己紹介

こんにちは。2016年4月に東京のITの専門学校に通い始め、6月から本格的にITの勉強を始めました。趣味は、読書と勉強?です。好きな言語はCです(なんだかんだ一番綺麗に感じる)。好きなOSはArchLinuxです。現在は「将来これで食っていきたい!」というものがないため、見つけるために「プログラム」、「ネットワーク」絞ることなく広く勉強しています。及ばないところも多々あると思いますが、よろしくお願いいたします。アドバイス、質問なども頂けたら、幸いです。

Twitterもサイドバーからフォローできますのでよろしければ是非。

また、以下の記事でこのブログの趣旨も執筆しております。

はじめに - 0から学ぶIT技術

使用OS

ArchLinux

GUIはawesome

エディタはvim

獲得資格
  • ITパスポート
  • 基本情報技術者
  • MOS Word スペシャリスト
  • MOS Excel スペシャリスト
  • J検 3級2級
  • 情報システム試験 基本スキル
  • 情報システム試験 システムデザインスキル
  • 情報システム試験 プログラミングスキル
触ったことある言語

 

大会参加経験
  • ISUCON6
  • MBSD
  • Atcoder(毎週土曜日にある)
  • SECCON2016

 

カテゴリー説明

ArchLinux カテゴリーの記事一覧 - 0から学ぶIT技術

ArchLinuxの環境(vimとか)、ソフトウェア、設定などに関する記事。

C カテゴリーの記事一覧 - 0から学ぶIT技術

C言語に関する記事。

大会 カテゴリーの記事一覧 - 0から学ぶIT技術

大会の参加報告。

イベント カテゴリーの記事一覧 - 0から学ぶIT技術

イベントの参加報告。

その他 カテゴリーの記事一覧 - 0から学ぶIT技術

以上のどれにも属さない記事。

 

最後に

私は、いろんな立場の人と実際に会って目と目を合わせて話をして、いろんな角度から自分や自分の考えを見てもらい意見を交換することが、一番のモチベーションの向上、維持になり、一番勉強になると考えています。ので、是非、「話したい」、「会いたい」というかたは、twitterのDMや、このブログのコメント欄からお願いいたします。IT関係ない話も大歓迎です。学生、社会人などは問いませんのでお願いいたします。

Windows10とArchLinuxのデュアルブート!

ArchLinux

こんにちは。

今回は、ArchLinux*1Windowsデュアルブート*2をしたいと思います。

結果から言いますと、失敗し、Windowsを消してしまい、ArchLinuxもインストールできませんでした(が、成功例も載せます)。

その時の自分の考えと、やった行動を残すと共に、なんで駄目だったのかなどの勉強を兼ねて、執筆します。

 

前提として

私自身調べていく中で、デュアルブートはおすすめできません。

触るくらいなら、Virtualboxなどの仮想でいいと思います。

もしくは古いPCなどに入れたりのほうがおすすめです。

windowsとlinuxのデュアルブートの問題点

記者の眼 - WindowsとLinuxのデュアル・ブートに落とし穴:ITpro

 

当初の予定
  1. Windowsに空きパーティション*3を作る。
  2. ArchLinuxのUSBインストールメディア*4を作る。
  3. ArchLinuxをインストール。

 

f:id:naro3:20161015183011p:plain

完成図はこんな感じ(画像のUbuntuがArchだと考えてください)。

 

ArchLinuxのISOファイルのダウンロード

Arch Linux - Downloads

から「Japan」の「jaist.ac.jp」を選択し、「archlinux-[日付]-dual.iso」を選択しダウンロードします。

(「.iso」を含む項目の中では一番上にあります。)

 

Windowsに空きパーティションを作る

Windowsの方で、

「スタートメニュー→コンピュータを右クリック→管理をクリック」

でコンピュータの管理画面を起動、左側のツリー表示から「記憶域→ディスクの管理」でディスクの管理画面を起動し、Linux用のパーティションを作成します。

パーティションの分割は分割したいHDDの領域を右クリックします。

好みの領域のサイズを選択し、「ボリュームの縮小」をクリックすると、パーティションが、分割、作成されます。

このとき「未割り当て」というパーティションができます。

*このとき、網掛けのパーティションがあると思いますが、このパーティションMBR*5です。今回のようにWindowsLinuxを追加する場合はこのMBRLinux用のものに変わります。

 

ArchLinuxのUSBインストールメディアの作成

 この作業は、ArchWikiにはWindowsの場合は、「Cygwin*6」や、「dd for Windows」という方法が書いてありますが、この方法通りやっても自分はできませんでした。

後で調べたところ、書き込みがうまく行ってなかったようです(これが失敗の元凶)。

ですので、素直にLinuxにて、作成するほうが確実です。

# dd bs=4M if=[ISOファイルをパスで指定] of=/dev/[USBデバイス指定] && sync 

ですので、私は

# dd bs=4M if=/home/user/Download/archlinux-2016.9.3-dual.iso of=/dev/sdb1 && sync

としました。

USB インストールメディア - ArchWiki

 

余談(失敗談)

ここで私の失敗を執筆します。興味ない方は飛ばしてください。

私は、先に書きました、WindowsでのUSBインストールメディア作成を試み、書き込みがうまくいかなかったです(たまに起動してもrootfs*7となっている)。

ですので、USBを使うのが悪いと考え、自分でISOファイルを展開し、空きパーティションに入れました。

これで、大丈夫だと思ったのですが、よく考えたら、MBRGRUBに変えてないのに選べるわけがなく、Windowsも起動しなくなりました。

このとき私は、どっちのOSを選んでいいかわからないから、Windowsも起動しないと思ってました。

ArchLinuxをちゃんとインストールし、MBRGRUB*8に変えれば、Windowsパーティションは無事だから、復旧できるとも思ってましたが、後日、Archユーザーの先輩にUSBインストールメディアを作成してもらい、確認したら、Windowsパーティションも消えてました。

この際に先輩とWindowsで書き込んだUSBとArchで書き込んだUSBの中身を比べたら、3bit目から違ってました。また、後ろの方は、ほとんど空っぽにもなってました。

これについては、自分の力不足もあり、まだ解明できてないです。わかり次第、追記します。

 

今回はここまでです。

次回は、「ArchLinuxのインストール」という記事で、残りの作業を執筆します。

*1:Linuxの種類のひとつ。

*2:パーティションごとに実際のOSをインストールすることで、単一の物理コンピュータ上で複数のOSを利用する形態。

*3:ハードディスクの記憶領域を論理的に分割し、その個々の領域のこと。

*4:ソフトウェアをインストールするためのプログラムやデータファイルが収録された記録媒体。

*5:単数または複数のパーティションに分けられたディスクにおける先頭セクタ(これはパーティション外に存在する)にある、ブートセクタの一種。

*6:WindowsLinuxのコマンドが使えるようになるソフトウェア。

*7:Linuxにおいて、ルートディレクトリに対応するファイルシステム

*8:GNUプロジェクトにて開発されている高機能なブートローダー。