Dot language learning note

Dot is a script language in Graphviz tool box to create graphs. Using layout engine to create graph, then we can export graph to many format of image, such as png, jpg, svg .etc. So we can use it to ‘paint’ structure diagram, and flow charts.

Commonly used keywords
graph: define properties of the graph
node: define properties of nodes in the graph, such as fontname
subgraph: define a subgraph, should start with ‘cluster_’, or the engine can’t recognize it.

For example


digraph service_map {
    graph [dpi="300"];
    node [color="gray";shape="record";fontname="Microsoft YaHei"];
    
    label="Service Map";
    Request;
    github_pages [label="GitHub Pages"];
    subgraph cluster_web{
        label="Web front end server";
        nginx [label="Reverse Proxy Server"];
        docker [label="Docker Container Manager"];
    }
    subgraph cluster_docker{
        label="Docker Container Manager";
        openproject [label="OpenProject"];
        gitlab [label="GitLab"];
        wordpress [label="WordPress"];
        mysql [label="Common Mysql Database"];
    }
    subgraph cluster_filesystem{
        label="Mount at where";
        openproject_mnt [label="/opt/openproject/data:/var/lib/postgresql/9.6/main\l\n/opt/openproject/logs:/var/log/supervisor\l\n/opt/openproject/static:/var/db/openproject\l"];
        gitlab_mnt [label="/opt/gitlab/config:/etc/gitlab\l\n/opt/gitlab/logs:/var/log/gitlab\l\n/opt/gitlab/data:/var/opt/gitlab\l"];
        wordpress_mnt [label="/opt/wordpress/www:/var/www/html"];
        mysql_mnt [label="/opt/mysql/data:/var/lib/mysql"];
    }
    Request->nginx;
    nginx->docker;
    nginx->github_pages;
    docker->wordpress [label="hostname=wordpress.endercaster.com"];
    docker->openproject [label="hostname=openproject.endercaster.com"];
    docker->gitlab [label="hostname=gitlab.endercaster.com"];
    wordpress->mysql;
    wordpress->wordpress_mnt [label="mount"];
    openproject->openproject_mnt [label="mount"];
    gitlab->gitlab_mnt [label="mount"];
    mysql->mysql_mnt [label="mount"];
}

The code generated a diagram below

Using dot, I don’t have to care about layout, just pay attention to modules in software, what feature does it provide. It’s easily to use, I like it.

Shell Shock

Aims to:

A program contains setuid(geteuid()).

Requirement:

Bash version lower than 4.1

Reason:

When run, bash will load envirment vars, and custom function, like


export foo='(){:;};echo hello bash'

When I try this vulnerability, I type geteuid as getuid, and have not triger this.

A commemorative post for build local site with docker

At the first line, I wanna say: docker is the best tool to improve the production efficiency.

I want to build my own site for a long time, and today, succeed. I depley the three site at one server (my laptop, ThinkPad X1C 2014), the site works very smoothly. So I record my action below.

MySql


sudo apt-get update && sudo apt-get install mysql-server

WordPress


docker run -itd --name wordpress \

-v /opt/wordpress/html:/var/www/html \

-p 12080:80 \

wordpress

OpenProject


docker run -itd --name openproject \

-v /opt/openproject/pgdata:/var/lib/postgresql/9.6/main \

-v /opt/openproject/logs:/var/log/supervisor \

-v /opt/openproject/static:/var/db/openproject \

-p 10080:80 \

openproject/community

Gitlab


docker run -itd --name gitlab \

--hostname gitlab.endercaster.lan \

-v /opt/gitlab/config:/etc/gitlab \

-v /opt/gitlab/logs:/var/log/gitlab \

-v /opt/gitlab/data:/var/opt/gitlab \

-p 11080:80 \

-p 11022:22 \

-p 11443:443 \

gitlab/gitlab-ce

Then, using nginx as reverse proxy, proxy by host.