มาลองรัน KDE neon บน Docker กัน

ก่อนอื่นสำหรับใครที่ไม่คุ้นกับ KDE

KDE หรือชื่อเต็ม K Desktop Environment เป็นสภาพแวดล้อมในการทำงานแบบเดสก์ท็อป (Desktop Environment) ที่เป็นซอฟต์แวร์เสรี พัฒนาบนทูลคิท Qt ของบริษัท Trolltech และทำงานได้บนระบบปฏิบัติการตระกูลยูนิกซ์เกือบทุกรุ่น เช่น ลินุกซ์, BSD, AIX และ Solaris รวมถึงมีรุ่นที่ใช้งานได้บน Mac OS X และไมโครซอฟท์วินโดวส์

ปัจจุบัน (22 มกราคม 2561) นี่ก็พัฒนา Plasma รุ่นเสถียรถึงเวอร์ชั่น 5.12.7 (LTS) ละ  KDE เป็น Desktop Environment เพราะฉะนั้น เราก็สามารถติดตั้งบน Distributions ต่าง ๆ ได้ เช่น CentOS Debian Ubuntu หรือแม้กระทั่ง Windows เองก็เหอะ

แล้ว KDE neon หล่ะมายังไง

KDE neon is a set of software repositories for Ubuntu long-term support (LTS) releases with latest 64-bit version of KDE desktop and applications. The KDE neon Linux distribution is focused on the development of KDE

ด้วยความที่ neon รันอยู่บน Ubuntu เราก็สามารถโหลดไฟล์ ISO มารัน/ติดตั้งใน VMWare หรือ VirtualBox ได้เลย

รันบน VertualBox Version 6.0.2

 

หน้าสำหรับดาวน์โหลด Live Images

เลื่อนลงมานิดนึงก็จะมีเวอร์ชั่นสำหรับ Docker ให้ใช้งานด้วย จุดประสงค์ของคนที่ใช้งานบน Docker หลัก ๆ ก็น่าจะมาจาก

  • อยากลอง
  • ลองเสร็จก็พอ อยากลบทิ้งแบบคลีน ๆ
  • VMWare/Virtual Box  หน่วงรู้สึกได้
  • Docker มันก็ทำได้นี่นา งั้นก็ลองกันเลย

เริ่มด้วยกันติดตั้ง Docker (สำหรับใครที่ยังไม่ได้ติดตั้ง ปกติแล้วเรามักจะอ้างอิงจาก เอกสารทางการของทาง Docker เอง นั่นชัวร์ที่สุดละ)

sudo apt-get install docker-ce xserver-xephyr

** xserver-xephyr ต้องติดตั้งเพิ่มด้วยนะ

เสร็จก็ทำการ pull image ล่าสุดของ KDE neon

sudo docker pull kdeneon/plasma:dev-unstable

ขนาดก็ประมาณ 1 GB สายเปรี้ยวก็ใช้เวอร์ชั่น dev-unstable ไป ^__^
ถึงขั้นตอนการรันก็ใช้คำสั่งตามนี้  (เป็นค่าเริ่มต้น) เพื่อให้ Xephyr ทำหน้าที่เป็น X Server Window

Xephyr -screen 1024x768 :1 &
docker run -v /tmp/.X11-unix:/tmp/.X11-unix kdeneon/plasma:dev-unstable

จบปิ๊ง ^__^

เพิ่มเติม

Automatic Update All Docker Images

สำหรับอัพเดต Docker Images ทั้งหมดที่ได้ติดตั้งไปแล้ว ใช้คำสั่งด้านล่างนี้

docker images | grep -v REPOSITORY | awk '{printf $1; printf ":"; print $2}' | xargs -L1 docker pull

โดยเมื่อเราได้อัพเดตไปแล้วไฟล์ตัวใหม่จะไม่ได้ทับ (Overwrite) ตัวเดิม เราต้องตามไปลบ (Cleanup) ตัวเดิมอีกรอบ โดยใช้คำสั่ง

docker images | grep "<none>" | awk '{print $3}' | xargs -L1 docker rmi


จบปิ๊งง  ^_^

สร้าง docker container สำหรับทำ REST API กัน – Full fake data

ในวันที่ต้อง Mock API แบบด่วน ๆ สำหรับทดสอบ Front-end (แต่ Back-end จริง ๆ มันยังอยู่แค่ในร่างออกแบบ) งั้นก็เริ่มกันเลย

เราใช้ json-server เป็นตัวช่วยทำ Mock API ซึ่งก็ตอบโจทย์และเร็วสุดละ สิ่งที่เราต้องทำเพิ่มคือสร้างชุดข้อมูลสำหรับทดสอบเท่านั้นเอง

npm install -g json-server

ส่วนการสร้างชุดข้อมูลก็ใช้ faker.js (เราใช้ lodash เพิ่ม ก็ติดตั้งเข้าไปพร้อมกันเลย)

npm install faker lodash

สร้างชุดข้อมูลแบบ random ด้วยไฟล์ชื่อ generator.js เข้าไป

// generator.js
module.exports = function () {
    var faker = require("faker");
    var _ = require("lodash");
    return {
        customers: _.times(Math.floor((Math.random() * 1000) + 1), function (n) {
            return {
                id: n+1,
                firstname: faker.name.firstName(),
                lastname: faker.name.lastName(),
                birthdate: faker.date.past(50, new Date("Sat Sep 20 1992 21:35:02 GMT+0700 (ICT)")),
                address: faker.address.streetAddress(),
                city: faker.address.city(),
                country: faker.address.country(),
                email: faker.internet.email(),
                avatar: faker.internet.avatar()
            }
        })
    }
}

หลังจากที่เรา Start Server ด้วยคำสั่ง json-server generator.js ข้อมูลที่เรา generate ขึ้นหน้าตาก็ประมาณนี้

ท้ายสุดเราก็แพ็คลง Container เลย โดยสร้าง Dockerfile ไว้ใช้งานยาว ๆ  (เป็นลางว่า Back-end จะยังไม่เสร็จในเร็ววันใช่ไหม 55555)

FROM node:10-alpine

LABEL author="mf"
LABEL version="latest"

ENV NPM_CONFIG_LOGLEVEL info
ENV TZ Asia/Bangkok

RUN apk add --no-cache tzdata \
    && cp /usr/share/zoneinfo/Asia/Bangkok /etc/localtime \
    && echo "Asia/Bangkok" >  /etc/timezone \
    && rm -rf /var/cache/apk/*

# Create application directory
RUN mkdir -p /data \
    && npm install -g json-server lodash faker
WORKDIR /data

VOLUME [ "/data" ]
EXPOSE 3000

# Default command
ENTRYPOINT ["json-server"]
CMD ["--help"]

หลังจาก build Dockerfile แล้วก็ลองรันกันเลย ถ้าไม่ทำอะไรผิดพลาดผลลัพธ์มันก็ควรจะเป็นดังรูป

docker run -d -p 3000:3000 -v `pwd`/app:/data mf/mockup-api --watch generator.js --host 0.0.0.0

จบปิ๊งง ^_^

Dockerized Primitive Pictures – Reproducing images with vector-based geometric primitives

มีโปรเจคบน github ที่ใช้สร้างรูปภาพด้วย geometric primitives สำหรับใครที่ชอบรูปภาพแบบนี้จะรู้สึกแบบฟินมากที่มีโปรเจคนี้ขึ้นมา ปรบมือให้เลยหล่ะกัน 👏 👏 👏 👏 👏
ภาพ geometric primitives คือ ? จะอธิบายไงดีให้ภาพมันอธิบายตัวเองหล่ะกัน

รูปใหญ่ ๆ ก็จะประมาณนี้ สวยใช่ไหมล่ะ ^_^

ใครอยากตามไป Fork ก็ตามนี้เลย https://github.com/fogleman/primitive  ส่วนเราก็มาลองสร้าง Docker กัน

  1. เราใช้ Image จาก Go (golang) is a general purpose, higher-level, imperative programming language
FROM golang:alpine
MAINTAINER M
LABEL version="latest"

RUN apk add --no-cache git && \
mkdir -p /opt && cd /opt && \
go get -u github.com/fogleman/primitive

VOLUME /opt
WORKDIR /opt

CMD ["/bin/sh"]
  • มาลองใช้งานกัน
    docker run -it --rm -v /path/data:/opt primative:alpine primitive -i input.png -o output.png -n 100
  • มาดูผลลัพธ์กัน
  • ชอบ ๆ ๆ 😍😍😍😍

Dockerized (SQLiv) massive SQL injection

SQLiv
Massive SQL injection scanner

FROM alpine:latest
MAINTAINER M
LABEL version="latest"

RUN apk add --no-cache python py-pip openssl git && pip install --upgrade pip && \
rm -rf /var/cache/apk/* && \
mkdir -p /opt && cd /opt && git clone https://github.com/Hadesy2k/sqlivulscan.git && \
cd /opt/sqlivulscan && \
chmod 755 /opt/sqlivulscan/setup.py && \
python2 setup.py -i

RUN rm -rf /opt && chmod 755 /usr/share/sqliv/sqliv.py

WORKDIR /usr/share/sqliv

ENTRYPOINT ["python", "sqliv.py"]
CMD ["--help"]

ป.ล.

  • ไว้ใช้สำหรับหาข้อผิดพลาดเพื่อป้องกัน ไม่แนะนำให้ใช้มีดแทงตัวเอง นะจ๊ะ นะจ๊ะ
  • อยู่ในแลปช่วงหัดเขียน Dockerfile
  • ข้อมูลเพิ่มเติมที่ https://en.kali.tools/all/?tool=1334
  • build เอาหล่ะกันนะจ๊ะ นะจ๊ะ