guni.log

日々の進捗・ポエムのごった煮

はてなインターンで最高の夏を過ごしていた話

えー、ブログのネタは鮮度が大事だそうです。
さて、今年の夏は株式会社はてなさんのサマーインターンに参加させていただきました。
2,3ヶ月前っすね。冷蔵庫開けて確認するのが怖くなるぐらいの時間経ってますね。
ごめんなさい。

developer.hatenastaff.com

期間は8/13~9/7の一ヶ月間。
場所は株式会社はてな本社(京都)。

選考

選考は以下の2段階からなります。

  • 書類選考
  • 面接

書類選考は自己アピール的なことと、GitHubのアカウント、rot13のPythonでの実装を書いて送りました。
面接は、東京にも京都にも気軽にいけるわけではないため、Hangoutでやっていただきました。
自己アピールにも書いてない成果物もGitHubから探し出して聞かれたので正直驚きました。
やっぱりアウトプットは大事(なおブログ)。

事前課題

事前課題では、GoとTypeScriptの勉強をしてきてって感じの内容でした。
具体的には以下のような感じ。

Golang

  • Tour of GoのExerciseを全て解く
  • mackerel-pluginに挑戦

TypeScript

インターン前日に大急ぎで仕上げてました。
大学のレポートは早めに終わらせましょう。

インターンの内容

前半(講義パート)

前半1週目は、日記アプリを作るということで、午前講義、午後は課題の実装を行いました。
内容は以下の通りです。

  • GolangによるWebアプリケーション開発
  • RDBMS, SQL
  • GraphQLでのAPI開発
  • ReactによるSPAの実装

GoでWebアプリを作る時にディレクトリ構成とか、設計とかあまり知らなかったので、
そういったことも参考になりました。
また、GraphQLを初めて触ったので結構苦戦しました。

午前の講義では、自分の偏った知識の補完ができるため、とてもためになりました。
課題は、PRなどでレビューをしてもらえるため、貴重な経験となりました。
普段はあまりレビューしたりされてりする機会は多くはないので、
もうちょっとそういう機会を作ったほうが良いなあと思いました。

前半2週目は、以下の通りです。

機械学習を1度はやってみたいと思っていたため、やってみて良かったです。
パラメータ変えても精度が上がらなくて四苦八苦してました。

インフラについての講義は、インフラの歴史から、インフラエンジニアの今後の需要など、 個人的には今後の生存戦略的な意味でとても聞いててよかったです。

はてなの歴史についての講義では、はてなみたいな10年以上サービスを提供している企業がどういった歴史をたどったのか、 技術の発達とともに、企業はどう変化していくのか学べたのは大きいと感じました。

AWSハンズオンでは、WordPressをEC2上に構築し、冗長構成、DBのレプリケーションを行ったり、 前半の講義で作った日記アプリをCodePipelineでECSにデプロイしたりしました。

後半(チーム配属パート)

後半はインターン生は、各コースに配属されて実際にサービスを触りながら、それぞれの課題をやっていきます。
僕は大規模システム開発コースということで、システムプラットフォーム部でお世話になりました。
僕はコンテナに興味があったため、コンテナデプロイ基盤の検証をしていきました。
内容は、はてなの技術ブログに取り上げていただきました。

developer.hatenastaff.com

https://cdn-ak.f.st-hatena.com/images/fotolife/c/cohalz/20180918/20180918102601.png

パブリッククラウドにおけるコンテナを運用するためのCI/CDパイプラインや、冗長構成など コンテナの基盤を作れるようになりたいと思っていたため、 本番環境で運用する際、どのような構成になっていると嬉しいのかなど聞けたりしたので良かったです。

周りにインフラをやってる人があまり多くないので、仕事でインフラをやっている人の話が聞けるのはすごく貴重でした。 研究室とかのサーバ管理などもすることがあると思うので、もっと精進したいです。

シスプラの方々にはとてもお世話になりました。
id:wtatsuruさんにはプロジェクトの進捗管理していただいたり、夕飯おごって頂いたり…
id:cohalzさんにはメンターとして付きっきりで面倒見てもらったり、夕飯おごって頂いたり…
id:masayoshiさんには低レイヤーの濃い話を聞かせていただいたり、夕飯おごって頂いたり…

その他

1ヶ月も京都にいたのに全然お金使わなかった…。
宿泊費、交通費、朝、昼の食事代は出してもらったので、切り崩さないですみました。
夕飯は、社員さんにいろんなところに連れ回してもらったため、美味しいご飯を堪能してきました。
ラーメンめっちゃ美味しかったです。

f:id:guni1192:20181112113740p:plain

他のインターン生のエントリ

noahorberg.hatenablog.com

tomoyaf.hatenablog.com

www.mizdra.net

yaamaa-memo.hatenablog.com

e-ntyo.hatenablog.com

turtar-fms.hatenablog.com

albacore.hateblo.jp

まとめ・今後

はてなインターンでは、前半後半共に多くのことを学びました。
インターン生同士でも学びがあって最高のメンバーでした!

個人的には、成果発表の順位が悔しくてしょうがないのですが、それはそれ。 次にうまいこと活かせれば何も問題ないので、今後はもっとバリュー出して行きます!!

私事ですが、希望している研究室に無事配属になったので、これから研究頑張るぞいって感じ。
趣味開発はコンテナエンジンの開発を始めました。
OSSのコンテナエンジンの実装を読み漁りながらRustでカキカキしていきます。

ブログでこまめにアウトプットする習慣ってどうやったらつきますかね。

サーバ監視入れてみた話

最近扱うサーバが増えたため、サーバ監視を導入する。 サーバ監視に使うのはPrometeusというGolang製のシステムの監視ツール。

それで今回は、Prometheusの設定を一通りやって行く話。

  1. PrometheusをDockerで動かす
  2. docker-compose.ymlに設定をまとめる
  3. 監視する情報を追加する(prometheus.ymlの記述)
  4. Nginxにリバースプロキシの設定
  5. node-exporterを使ってホストの監視をする。

1. PrometheusをDockerで動かす

公式のドキュメントを読んだまま、とりあえずコンテナ立ててみる.

$ docker run --name prometheus -d -p 127.0.0.1:9090:9090 quay.io/prometheus/prometheus

これでhttp://localhost:9090にアクセスして確認する。

2. 監視する情報を追加する(prometheus.ymlの記述)

このままでは大したものが監視できず、アラートも使えないので、prometheus.ymlを書いて、コンテナ側の/etc/prometheus/prometheus.ymlにバインドさせる。

global:
  scrape_interval:     15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

3. docker-compose.ymlに設定をまとめる

version: '2'
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

4. Nginxでリバースプロキシの設定

DNSの設定でCNAMEにprometheusを追加する。
次に、/etc/nginx/prometheus.confを以下のように書けばok。

server{
    server_name    prometheus.example.com;
    listen 80;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location / {
        proxy_pass    http://localhost:9090;
    }
}

server_nameに設定したアドレスにアクセスして確認する。
リバースプロキシもnginx-proxy使ってできるようにする予定。
これでprometheus自体の監視はできたので、次はホストの監視を行う。

5. node-exporterを使ってホストの監視をする。

ホストの監視をするにはnode-exporterというモニタリングしてデータを集めてくれるツールがある。
ついでなのでこれもDockerで済ませる。

$ docker run -d -p 9100:9100 --net="host" prom/node-exporter

更にprometheus.ymlを以下のように書き直す。

scrape_configs:
  - job_name: 'Prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'Nodes'
    scrape_interval: 5s
    static_configs:
      - targets: ['node1.example.com:9100']
      - targets: ['node2.example.com:9100']

これでホストの監視もできるはず。

Alertの設定は後で書く。

ペパボのインターンシップに参加した

ブログ更新するのは久しぶりですかね。
2/14~2/23の間、GMOペパボ福岡支社にインターンシップに参加させていただいた。
友人(@gamerkohei)とともに参加しました。

なるほど、先輩方が勧めるのもわかる。
人権が保証されている。そして何よりも技術的な刺激を多く受けられる。
大学内, サークル内ではなかなか触れられないものに触れる機会がたくさんあった。
その中でも、書いても大丈夫そうなところだけ書いていこうと思う。

インターン中のぐに

インターンの内容

ムームードメイン

ムームードメインのフロントの方を触るのがメインタスクだった。
f:id:guni1192:20180224121127p:plain

UI挙動の修正

UIはカートの金額周りの挙動(値段のグルグルするところのフラグ)の修正を行った。
更にES5で記述されたところが多かったので、ES6に書き換えを行った。
実際にレビューしてもらって早めにリリースできた。(個人的にはまだ遅い)
f:id:guni1192:20180224123013g:plain

リファクタ

テストを生やすことを最優先にしてみようと思ったが、
テストするVueインスタンスが大きく、テストケースを用意することが難しそうだと思い、
クラス化して分割するか、Vueコンポーネント化するかで迷った。
テストのしやすさ、今後のSPAに移行したりする可能性なども考慮して、Vueコンポーネント化することにした。
仕様と何回もぶつかったけど、なんとかコンポーネントに分けることができた。

テスト

今までほとんどテストを書くことがなかったため、
いきなりJavaScriptのテストを書くのはなかなか大変だった。
モック周りはどうにかなったものの、
非同期処理のテストなどになると、かなり苦戦した。
テストケース単体は普通に実装できたが、
これらのテストケースをすべて並列実行せているため、
テストの結果が他のテストケースに影響を及ぼしてしまい、
それに1時間以上苦しんだ。
解決策として、非同期処理を行っているテストケースを順序実行するようにした。
テストを書き終えたらまたレビューしてもらい、2回めのリリースを迎えた。

Chefのハンズオン

第2リリースが終わって、
最終日が暇だったのでChefのハンズオンを受けた。
内容としては、Chefの環境を構築して、
NginxにRailsのサンプルアプリをデプロイするまでだった。
ちゃんと構成管理ツールを使ったことがなかったので、
「おお!Ruby入った!」って感じでワクワクしながらやっていた。

pmr-checkerの機能追加

リリースもハンズオンも終わり、成果発表まで暇だったのですが、
急にホスティング事業部の@pyama86さんからのタスクが降ってきた。

PHPでできたサイトで、外部に見えてはいけないファイルをチェックするpmrコマンドというのがある。
そのpmrを使って漏れファイルを簡単にチェックを自動化するツールをRubyでpmr-checkerの機能追加をしてほしいとのこと。
具体的にはホワイトリスト形式で、設定ファイル(yaml)に書かれたものをチェック時スルーする機能を追加する。
時間と即興で書く実装力、Ruby力が足りなくてプルリクが最後まで行けなかったことに後悔。
もうちょっと限られた時間でどれだけコードが書けるかという経験も必要かもしれない。

KPTA

インターンを振り返ってKPTA(Keep, Problem, Try, Action)を行った。
自分がやりたいこと、今後の課題を見つめ直すことができた。
f:id:guni1192:20180224121350p:plain

Hacker Tackle

2/17日に開催されたHacker Tackleのセッションを聞いてきた。
並列プログラミングの話や、機械学習周りの話が多かった印象。
Rustの話や、@udzuraさんのコンテナのセッションも聞いてきた。

これからどうするよ

大学1~2年の間は色々経験してみようと思って、
Webのフロント、バック、インフラをいろいろさわってみたけど、
本当にやりたいのはインフラだと気づいた。
サービスを作るより仕組みを考えるほうが好きなので、
インフラ周りは楽しいんじゃないかと。
研究室や就職先を選ぶ方向性が定まってきたのも、
このインターンでの大きな収穫だった。

感想

飲み会も多くて、とても楽しかったです❗
僕自身が少食+酒に弱いのがちょっとアレだけども。
多分ご飯についてはもう一人のほう(@gamerkohei)が書いてくれるでしょう。

最終日に技術部やペパ研の方々とも飲みの席で話せて興味がわきました。
実は飲み会の最後に@pyama86さんに「OSSの世界でまた会いましょう!」って言われたのが超嬉しかったのは内緒。
絶対また会いにいける戦闘力を手に入れてやる👊という意気込み。

インターンシップっていい制度だな~。
「あと2年で強くなって戻りたい!」って考えが何回も頭をよぎるぐらい良さでした。
ずるいなあ。そりゃファン増えるわ。

最後になりましたが、素晴らしい体験をさせて頂いたペパボの皆様に感謝を。
ペパボのみなさん、8日間、本当にお世話になりました。

自作言語を作り始めた話

久々のブログ更新でこの1年何もやってなかったことが露呈してしまう。

今回は何を血迷ったか急にプログラミング言語が作りたくなったので、作ってみることにしました。

プログラミング言語 Sobaの開発

とりあえず、四則演算とかできるところまでは作ってみようというわけで、やってみました。
実際に実装した機能は、

  • 四則演算
  • 変数代入, 参照
  • if文

大したものはやってないです。

概要

今回つかったツールは以下のようになります。

Bisonは構文解析を行うパーサーを生成するツールで、yaccの上位互換となっています。
Flexは字句解析器とよばれ、文字列の変換抽出を行います。
実際に、Flexでプログラム中のキーワード(if, for, 演算子、数字など)を抽出し、それをBisonに渡して、Bisonはキーワードの組み合わせを解析し、その組み合わせごとに決められた処理を行わせます。

実装

実際に私が書いたコードは以下の2つのみです。

  • soba.l: 字句解析を行ってキーワードをbisonに渡します。
  • soba.y: パーサーを生成し、パターンごとの処理をさせます。

src/soba.l

%{
#include <stdio.h>
#include <string.h>
#include "soba.tab.h"

int yywrap(void) {
    return 1;
}
%}

%%

"udon" { fprintf(stderr, "Syntax Error: %s\n", yytext); exit(1); }

[+\-*/%=<>:;]  {
    return yytext[0];
}

"\n"              return LF;
"if"              return IF;
"for"             return FOR;
"in"              return IN;
"print"           return PRINT;
"println"         return PRINTLN;

[ \t]+ {}

\".*\" {
  yytext[strlen(yytext)-1] = '\0';
  yylval.string = strdup(&yytext[1]);
  printf("%s\n", yylval.string);
  return STR;
}

[1-9][0-9]\.\.[1-9][0-9] {
    yylval.string = strdup(yytext);
    return RANGE;
}

[1-9]?[0-9]* {
    int temp;
    // 入力から実数を取得
    sscanf(yytext, "%d", &temp);
    yylval.int_value = temp;
    return INTEGER;
}

[0-9]*\.[0-9]* {
    double temp;
    sscanf(yytext, "%lf", &temp);
    yylval.double_value = temp;
    return FLOAT;
}


[a-zA-Z_]+ {
    yylval.string = strdup(yytext);
    return(VAR);
}



. { fprintf(stderr, "Syntax Error: %s\n", yytext); exit(1); }

%%

src/soba.y

%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define YYDEBUG 1

#define VARSIZE 255

typedef struct {
    char *name;
    double value;
} variable;
int var_used = 0;
variable var[VARSIZE];
double get_value(char *name);
int substitution(char *name, double value);

%}

%union {
    int          int_value;
    double       double_value;
    char         *string;
}


%token <int_value> INTEGER
%token <double_value> FLOAT
%token <string> VAR STR RANGE
%token LF IF PRINT PRINTLN FOR IN
%type <int_value> block expr number if_stmt
%type <string> string
%start program

%left '+' '-'
%left '*' '/' '%'

%%
program
    :
    | PRINT block LF    { printf("%d", $2); }
    | PRINTLN block LF  { printf("%d\n", $2); }
    | PRINT string LF   { printf("%s", $2); }
    | PRINTLN string LF { printf("%s\n", $2); }
    | program PRINT block LF    { printf("%f", $3); }
    | program PRINTLN block LF  { printf("%d\n", $3); }
    | program PRINT string LF   { printf("%s", $3); }
    | program PRINTLN string LF { printf("%s\n", $3); }
    | program block LF  { printf("--> %d\n", $2);}
    | string LF         { printf("--> %s\n", $1); }
    | block LF          { printf("--> %d\n", $1);}
    ;
string
    : STR               { $$ = $1; }
    ;
block
    : expr            { $$ = $1; }
    | VAR '=' expr    { substitution($1, $3); $$ = $3; }
    | if_stmt         { $$ = $1; }
    ;
if_stmt
    : IF expr ':' block { if ( $2 != 0 ) $$ = $4;
                          else $$ = 0; }
    | block IF block    { if ( $3 != 0 ) $$ = $3;
                          else $$ = 0; }
    ;

expr
    : number        { $$ = $1; }
    | expr '+' expr { $$ = $1 + $3; }
    | expr '-' expr { $$ = $1 - $3; }
    | expr '*' expr { $$ = $1 * $3; }
    | expr '/' expr { $$ = $1 / $3; }
    | expr '%' expr { $$ = $1 % $3; }
    ;
number
    : INTEGER         { $$ = (double)$1; }
    | FLOAT           { $$ = $1; }
    | VAR             { $$ = get_value($1); }
    ;
%%

int search_variable(char *name) {
    for ( int i = 0; i < var_used; i++ ) {
        if ( !strcmp(var[i].name, name) ) { return i; }
    }
    return -1;
}

int substitution(char *name, double value)
{
    int i = search_variable(name);
    if ( i == -1 ) {
        var[var_used].name = strdup(name);
        var[var_used].value = value;
        var_used++;
    }
    else { var[i].value = value; }
    return 0;
}


double get_value(char *name)
{
    int i = search_variable(name);
    if ( i != -1 ) { return var[i].value; }
    printf("%s is not definded\n", name);
    return 0;
}

int yyerror(char const *str)
{
    extern char *yytext;
    fprintf(stderr, "Syntax Error: %s\n", yytext);
    return 0;
}

int main(int argc, char* argv[])
{
    extern int yyparse(void);
    extern FILE *yyin;
    if ( argc < 2 ) { yyin = stdin; }
    else            { yyin = fopen(argv[1], "r"); }

    do {
        if (yyparse()) {
            fprintf(stderr, "Error Occured!\n");
            exit(1);
        }
    } while(!feof(yyin));
}

実行結果

f:id:guni1192:20171213121603p:plain

…電卓っすね。

今後の実装予定(言い訳フェイズ)

実装力の限界ッ!

文字列とfor文を今せっせと書いてるところです。
早いとこFizzBuzzできるようになりたいなあ。

今回内容が薄いのは今後に期待という感じでよろしくお願いします。

一応ここに、置いときますね。
https://github.com/guni973/soba

B3になったときのコンパイラの授業が楽しみでならない。
今後も機能追加、改善していくつもりなので、よろしくです。

参考リンク

まつもとゆきひろ 言語のしくみ

Flex

1年の振り返りと言いますか

技術とはあまり関係ない自分の思ったことや今年1年の振り返りでもしようかと。 実際ポエムに近い。

まあ今年何があったかざっくりと

  • 大学入った
  • MacBook Pro Early2015買ってもらう
  • 自作PCした
  • SLP(サークル)に入った
  • Pythonに手を出した
  • Linuxに興味を持ち出した

主に大学に入って思ったことと、今年1年の反省を書いていこうと思う。

大学に入った感想

工業高校から某国立大学に推薦入試で入った。
地元から離れ、一人暮らしをするのもなかなか面白いもので、寂しいとか実家に帰りたいとはあまり思わなかった。
サークルは、技術力の高い人が同期にも上にもたくさんいて、自分にとってとても良い刺激になったと思う。
工業高校といっても私は情報系出身ではないため、情報系の人間との関わりはせいぜいTwitterぐらいだった。
だからサークルでの活動は刺激的だったと思う。技術面だけでなく、精神面でも視野が広がったと思える。
人間関係が思ったより重要さを実感した。サークルで得られた情報も多いし、いろんなきっかけづくりになったと思う。

はじめは…

工業高校から大学に入って進学校出身の人間といろいろ話すと違うと思っていた。
だが、同期はさほど高校時代と変わらなかった。
自分から技術的なことを勉強するわけでもなく、
学校で教えてもらえると思っている人間が多く、はじめは嫌悪することもあった。
自分で勉強しに来たんだから他人に高めてもらうとかおこがましいとか思ってた。
価値観の違いが許容できないこともあり、 自分の理想を他人に押し付けたりするような言動もあったと思う。
良かれと思っていろいろ言った。
だが…、

ここから良い話になるかと思ったら大間違いだ。

別に技術力や関心がなくてもいっか。私に関係ない限りは。
だって大学生だぜ?自分の意思で来たんだろ?じゃあどうなっても知らねえ。
…と、無関心になるのがある意味お互いハッピーなんじゃないかと思った。
そんなこと考えてる暇あったらなんか勉強するほうがマシだ。

それでも反省すべき点はいろいろある

傲慢なところ、独善的なところは他人に無関心になることで少しは改善できると思う。 昔から道徳観のないところは直す気がまったくないからどうでも良い。むしろいらない。 謙虚じゃない、自重しない点は…直せる気がしない。

反省するとは言ったが直すとは言ってない。

…ひどい男だ どこまでも自分勝手な人間だと思う。
それでも自分は構わないし自分の性格が本気で悪いと思ったことは実はあまりない。
ただ、こんな偉そうなことを言っても説得力のある人間になりたいものだ。

来年の目標みたいなもの

  • 技術力の向上(最優先)
  • 自分が自由に動ける環境を構築する

駄文でお目汚し失礼しました

単なる率直な感想並べただけなのでスルー推奨です。

ConoHaで初めてのVPS(ArchLinux)

この記事はSLP_KBIT Advent Calendar 2016の6日目の記事です。

はじめに

サーバーほしいなあと思って、でもレンタルサーバーだったらCentOSとかUbuntu使うわけだからハードル高いですよね。(錯乱) じゃあVPSで自分の好きなディストリが入れたい。って思っていたらとあるイベントにて、

「ConoHaならArchLinuxのOSテンプレートがありますよ。」

と耳寄りな情報が。ConoHaってなんぞ?VPSはさくらぐらいしか知らないんだが状態な自分には新天地。 調べてみると

  • 豊富なOSテンプレートがある。
  • 豊富なアプリケーションテンプレートがある(主にCentOS用)
  • クレジットカードなしでもできる。
  • 最小構成で月630円~から始められる
  • 美雲このはちゃんがかわいい

目的

  • 今作ってるWebアプリの本番環境として
  • 自分で自由に管理できるサーバーが欲しかった
  • dockerの勉強用

環境

スペック

  • OS:ArchLinux 64bit
  • CPU:Xeon E5-2260 v3 2core
  • RAM:1GB
  • SSD 50GB
    f:id:guni1192:20161205152716p:plain

手順

必要なもの

  • PC
  • 630円以上のお金

サーバー起動まで

  1. ますConoHaに会員登録する
  2. 支払い方法(クレカ、銀行、PayPal、コンビニ)を決める
  3. サーバーを追加する
  4. スペック等の入力をする
  5. 構築するまで待って起動したらSSH接続してみる
  6. コントロールパネルで、SSH以外のポートを閉じる

各種設定

ssh 接続して、とりあえず更新

# ssh root@XXX.XXX.XXX.XXX
# pacman -Syu

ホストネームの変更

# echo [HOST_NAME] > /etc/hostname

あまりrootで作業したくないのでユーザーの追加

# useradd -m -g wheel <USERNAME>
# passwd <USERNAME>

あとsudoの権限を変える

# visudo     # %wheel ALL=(ALL) ALLのコメントアウトを外す

自分好みに必要なものインストール

# pacman -S zsh vim emacs tmux git

dotfilesのインストール

ますはrootで

# git clone https://github.com/guni973/dotfiles
# cd dotfiles
# ./makelink.sh

次はユーザに移って、ついでにシェルもZshに変える

# su <USERNAME>
$ cd
$ git clone https://github.com/guni973/dotfiles
$ cd dotfiles
$ ./makelink.sh
$ chsh
/usr/bin/zsh

ここで再起動させる。

powerlineのイントール

$ sudo pacman -S python python-pip powerline powerline-common
$ source ~/.zshrc

zplugのインストール

$ curl -sL zplug.sh/installer | zsh
$ zplug install

dockerのインストール

$ su
# pacman -S docker
# systemctl start docker

とりあえずArchLinuxいれてやってみる

# docker pull base/archlinux
# docker run -it base/archlinux bash

一応動いた。あとはこれから勉強する。

まとめ

  • 自分の好きにできる環境を作った
  • あとはrootでのログインを禁止にしたりする
  • 必要なもの入れたからあとはDockerなり、Nginxなどの環境作る
  • VPS初体験だったけど作業的にはインストール後のArchLinuxと変わらない

ArchLinuxのデスクトップ環境を構築する

ArchLinuxのデスクトップ環境を構築する

ArchLinuxをインストールしたあとの作業です。
ここからの作業は人それぞれになりますが、今回は私の環境を構築する際の手順を書いておきます。

使用環境

PC: Thikpad X250 DE: Gnome3 DM: GDM

インターネット接続

Wifiを使うのはNetworkManagerを入れてからにします。

# systemctl enable dhcpcd.service
# systemctl start dhcpcd.service

ユーザーの追加

# useradd -m -g wheel [USERNAME]
# passwd [USERNAME]

sudoの導入

# pacman -S sudo
# visudo

以下のコメントアウトを外して有効化する

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

ssh接続の設定

# pacman -S openssh
# systemctl enable sshd
# systemctl start sshd
# su [USER_NAME]

ssh接続

$ ssh [USERNAME]@192.168.XX.X

必要なもののインストール

$ sudo pacman -S vim git zsh tmux

X Window Systemのインストール

$ sudo pacman -S xorg-server xorg-server-utils xorg-xinit xorg-xclock xterm

グラフィックドライバはここを参考に
https://wiki.archlinuxjp.org/index.php/Xorg
自分はintelのグラフィックドライバなので

sudo pacman -S xf86-video-intel

タッチパッドの設定

sudo pacman -S xf86-input-synaptics

タッチパッドの設定は/etc/X11/xorg.conf.d/に記述します。 設定ファイルはここを参考に
https://wiki.archlinuxjp.org/index.php/Synaptics_%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%83%E3%83%89

ちなみに私の設定を載せておきます。

Section "InputClass"
    Identifier "touchpad catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    #Option "TapButton1" "1"
    #Option "TapButton2" "2"
    #Option "TapButton3" "3"
    Option "VertScrollDelta"  "-111"
    Option "HorizScrollDelta" "-111"
    # 横エッジスクロール
    Option "HorizEdgeScroll" "on"
    # 縦エッジスクロール
    Option "VertEdgeScroll" "on"
    # 左右同時クリックで中ボタン
    Option "Emulate3Buttons" "on"
EndSection

GNOMEの導入

$ sudo pacman -S gnome gnome-tweak-tool

ディスプレイマネージャの有効化

# systemctl enable gdm

Yaourt(AURヘルパー)の導入

AUR(Arch User Repository)を使うための準備

# vim /etc/pacman.conf

以下を追記

[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
[pnsft-pur]
SigLevel = Optional TrustAll
Server = http://downloads.sourceforge.net/project/pnsft-aur/pur/$arch

以下のコメントアウトを外す

[multilib]
Include = /etc/pacman.d/mirrorlist

保存して終了する

# pacman --sync --refresh yaourt
# pacman -Syu

これでyaourtが使えるようになる

日本語フォントの導入

# yaourt -S otf-ipaexfont

fcitxの導入

日本語を入力するため、fcitxとfcitx-mozcをインストールする

$ sudo pacman -S fcitx-im fcitx-mozc fcitx-configtool

.xprofileのに追記する

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

NetworkManagerの導入

NetworkManagerを導入する際にはntctlやwicdなどをを無効化しておく

$ sudo pacman -S networkmanager network-manager-applet xfce4-notifyd
$ sudo systemctl enable NetworkManager.service