ungleich-learning-circle/youngjin.han/learning-node02-2020.org

16 KiB
Raw Blame History

2020-05-15

cdist #6: Glueing it together

Lecture content
Objective
  • Apply learnings from the previous cdist sessions
Steps 1: __all_in_one (1.25h)
  • Create a new type named __all_in_one

    • Decide yourself whether it is a singleton or not
    • Reason why in your cdist.org file
  • It should work on alpine, debian and fedora
  • It accepts the following parameters:

    • with-x (boolean)
    • extra-packages (optional multiple)
  • On Alpine, it should install netcat-openbsd and tshark
  • On Debian, it should install netcat tshark
  • On Fedora, it should install nmap-ncat wireshark-cli
  • On all operating systems install socat sipcalc sudo
  • If the detected operating system is neither Alpine/Debian/Fedora, output an error message and abort the manifest with exit code 1
  • Additionally install all packages specified by the extra-packages parameter
Steps 2: __firewall (1.25h)
  • Create a new type __my_firewall
  • Add a type explorer to find out whether nft is present on the target system
  • Add a required parameter named file
  • If the type explorer does not detect nft on the target system, abort with an error message
  • Deploy the specified file to /etc/my-nftables
  • Add a type explorer that reads the current nft rules
  • If the rules are different on the target host, apply the new ruleset by generating code in gencode-remote
  • If the filename specified by the file parameter is - (the minus sign), then the type should read from stdin
Step 3: manifest (0.5h)
  • Create a new manifest in the folder that contains the initial manifest
  • Name the new manifest firewall
  • Source the firewall manifest in the initial manifest
  • In the firewall manifest, match on localhost

    • Install nftables
    • Use the __firewall type
    • Use correct require parameter to ensure that nftables is installed before the __firewall type is run

2020-05-13

cdist #5: Generating Code & Exploring

Lecture content
Objective
  • Understand how to generate code and when to use it
  • Exploring explorers
DONE Code generation steps

CLOSED: [2020-05-14 목 00:54]

  • Modify the previously created type __my_nginx_site
  • Read about cdist messaging
  • If there was a change in the nginx configuration file, reload nginx
DONE Explorer steps

CLOSED: [2020-05-14 목 00:54]

  • Modify the __my_nginx_site type to use the os explorer
  • Adjust your type to work on Alpine Linux and Debian (or two other Linux distributions of your choice)
  • Set the nginx configuration directory accordingly
DONE Documentation

CLOSED: [2020-05-14 목 00:54]

  • Explain the following in your cdist.org file
  • What is the difference between gencode-remote and the remote code?
  • What is the difference between gencode-local and gencode-remote?
  • Locate a type that comes with upstream cdist that uses gencode-local - which one is it? Why does it need gencode-local?

2020-05-11

cdist #4: Requirements

Lecture content
Objective
  • Understand how requirements work
DONE Create a new type __my_nginx

CLOSED: [2020-05-12 화 02:22]

  • Make it a singleton
  • Make it install nginx
  • Configure a host with it
  • Usually nginx is configured includes some files
  • On the target host find out which directory nginx includes
  • We name this directory nginx_config_dir
DONE Create a new type __my_nginx_site

CLOSED: [2020-05-12 화 02:22]

  • Assume the object_id is a domain
  • In the __my_nginx_site create a file inside the nginx_config_dir
  • The filename is ${domain}.conf
  • When using __file, it should require the nginx package

    • Read about cdist dependencies
  • The file should be a valid nginx configuration
  • The server name should be set to the specified domain
  • The root directive should point to /var/www/html/DOMAIN

    • (replace DOMAIN with the actual domain)
DONE Use both types in the initial manifest to configure the target host

CLOSED: [2020-05-15 금 21:07]

  • Create at least two domains
DONE Configure the target host

CLOSED: [2020-05-15 금 21:08]

  • Verify that the configuration files are properly created
DONE Delete the nginx package manually on the target host

CLOSED: [2020-05-15 금 21:08]

DONE Comment out __my_nginx from the initial manifest, keep the __my_nginx_site

CLOSED: [2020-05-15 금 21:08]

  • Explain the error that you get (in your cdist.org file)

2020-05-08

cdist #3: type parameters

Lecture content
DONE Create a new type named __colourful_file

CLOSED: [2020-05-15 금 20:29]

  • The objective is to create a type that creates colourful file
  • The content of the file should be "colour=…", where "…" is a colour specified by a parameter
  • Add an optional parameter named colour
  • Use the __file type inside your type to create a file
  • Use the $__object_id variable inside your type
DONE Extend your type to be more colourful

CLOSED: [2020-05-15 금 20:29]

  • Modify the optional parameter to be able to be specified multiple times
  • For each time it is specified, add a line "colour=…" to the file
DONE Create a new type __my_dotfiles

CLOSED: [2020-05-15 금 21:07]

  • Objective is to manage the dotfiles in your home directory
  • Make it a singleton type
  • Create a sub directory files in the type
  • Add your .emacs config to the files folder
  • Add a for loop to your type to deploy .[A-z]* to your home directory
  • Add a .bashrc or .zshrc to the files folder (depending on your shell)
  • In the initial manifest, add __my_dotfiles when the target host is localhost
DONE As usual commit all changes to your ungleich-learning-circle repo

CLOSED: [2020-05-15 금 21:07]

2020-05-06

cdist #2: Your first cdist type

Lecture content
Objective
Begin to understand how cdist types function
Steps
DONE Create a new type named `__my_computer`

CLOSED: [2020-05-06 수 22:53]

DONE Mark the type as a singleton type

CLOSED: [2020-05-06 수 22:53]

DONE Create a `manifest` file in it

CLOSED: [2020-05-06 수 22:53]

DONE Use this type to install the following packages: zsh, mosh, emacs, nmap, sipcalc

CLOSED: [2020-05-06 수 22:53]

DONE Edit the initial manifest and use __my_computer for localhost

CLOSED: [2020-05-06 수 22:53]

DONE Match using the $__target_host variable

CLOSED: [2020-05-06 수 22:53]

DONE Modify your type to use a for loop to install the packages

CLOSED: [2020-05-06 수 22:53]

DONE Deploy / manage your ~/.emacs file in this type

CLOSED: [2020-05-06 수 22:53]

DONE Ensure that permissions and ownership are correct

CLOSED: [2020-05-06 수 22:53]

DONE Use different verbosity levels when configuring

CLOSED: [2020-05-06 수 22:54]

DONE Ensure that all your changes are committed and pushed in your ungleich-learning-circle repository

CLOSED: [2020-05-06 수 22:54]

DONE Use magit inside emacs for that

CLOSED: [2020-05-06 수 22:54]

DONE Documentation steps to be done in cdist.org

CLOSED: [2020-05-06 수 23:02]

DONE Create a new org document named `cdist.org` in the same folder as the learning.org file

CLOSED: [2020-05-06 수 23:02]

DONE Explain the difference between a singleton and non-singleton type

CLOSED: [2020-05-06 수 23:02]

DONE Explain the difference between the different verbosity levels

CLOSED: [2020-05-06 수 23:02]

Document (copy&paste) some of the cdist runs in a "log" section```

2020-05-04

cdist #1: Introduction

Lecture content
Objective
Begin to use cdist
Steps
DONE Checkout cdist quickstart https://www.cdi.st/manual/latest/cdist-quickstart.html

CLOSED: [2020-05-04 월 22:32]

DONE Install cdist locally

CLOSED: [2020-05-04 월 22:32]

DONE Create a new cdist configuration directory in ~/ungleich-learning-circle/USERNAME/dot-cdist

CLOSED: [2020-05-04 월 22:32]

DONE Create an empty initial manifest ("use touch")

CLOSED: [2020-05-04 월 22:32]

DONE Commit that status

CLOSED: [2020-05-04 월 22:37]

DONE Ensure that you can login as root to localhost via ssh without a password

CLOSED: [2020-05-04 월 22:37]

DONE Configure cdist to configures the motd of your localhost

CLOSED: [2020-05-05 화 00:42]

DONE Ensure you have a case block matching on $__target_host

CLOSED: [2020-05-05 화 00:21]

DONE Use the -c parameter to cdist to specify the configuration directory

CLOSED: [2020-05-04 월 23:58]

DONE Use the -vv parameter to get more verbose output

CLOSED: [2020-05-04 월 23:57]

DONE Search for / understand what MOTD stands for

CLOSED: [2020-05-05 화 00:41]

DONE Configure cdist to create the file /etc/cdist-configured

CLOSED: [2020-05-04 월 23:33]

DONE Configure cdist to setup the timezone on your local computer

CLOSED: [2020-05-04 월 23:33]

DONE Configure cdist to ensure emacs is installed

CLOSED: [2020-05-04 월 23:47]

DONE Ensure that in the end all changes are committed in your repository

CLOSED: [2020-05-05 화 00:42]

2020-05-01

Organisation #5: Emacs refresher

Lecture content
Objective: get confident with emacs commands
Find out and document how to do the following steps
DONE Search for something forward C-s

CLOSED: [2020-05-01 금 21:40]

DONE How to continue searching C-s C-s

CLOSED: [2020-05-01 금 21:43]

DONE Search for something backward C-r

CLOSED: [2020-05-01 금 21:55]

DONE Search for regular expressions instead of string (forward, backward) C-M-s C-M-r

CLOSED: [2020-05-01 금 22:25]

DONE Go to the beginning of the line C-a

CLOSED: [2020-05-01 금 22:16]

DONE Go to the end of the line C-e

CLOSED: [2020-05-01 금 22:16]

DONE Delete a word in front (to the right of the cursor) M-d

CLOSED: [2020-05-01 금 22:17]

DONE Delete a word in back (to the left of the cursor) M-BackSpace

CLOSED: [2020-05-01 금 22:18]

DONE List all "occurences" of a word in a file M-s o

CLOSED: [2020-05-01 금 22:53]

You can copy above instructions into an emacs buffer
And test it by showing all occurences of the word "Search"
DONE Search (GREP) for a word in all files in a directory RECURSIVELY M-x rgrep

CLOSED: [2020-05-01 금 22:46]

DONE Save the CURRENT buffer C-x C-s

CLOSED: [2020-05-01 금 21:55]

DONE Save ALL open files C-x-s

CLOSED: [2020-05-01 금 22:22]

DONE Split the window/buffer vertically C-x 2

CLOSED: [2020-05-01 금 21:48]

DONE Split the window/buffer horizontally C-x 3

CLOSED: [2020-05-01 금 21:48]

DONE Switch between the different windows C-x o

CLOSED: [2020-05-01 금 21:48]

DONE Close all buffers besides the active one C-x 1

CLOSED: [2020-05-01 금 21:47]

Don't kill it!
DONE Close only the active buffer C-x 0

CLOSED: [2020-05-01 금 21:54]

Don't kill it!
DONE Kill the active buffer C-x k

CLOSED: [2020-05-01 금 21:44]

DONE Describe/Explain the difference between closing and killing

CLOSED: [2020-05-01 금 22:09]

closing is that emac do not display the buffer. and the contents on the buffer are kept on behined screen.
killing is that emac delete the buffer. and if contents are not stored, it is losted
DONE Switch between buffers that are not shown C-x b

CLOSED: [2020-05-01 금 21:51]

DONE Document two very similar, but slightly different ways

CLOSED: [2020-05-01 금 23:28]

C-x b is that the selected buffer is displayed on the focused window
C-x C-b is that all buffers is dispalayed on the new window
C-x 4 b is that the selected buffer is displayed on the new window
Outcome
DONE Document all above commands in your learning org sheet

CLOSED: [2020-05-01 금 23:28]

DONE Share your documentation at the end of the session (not before)

CLOSED: [2020-05-01 금 23:28]

2020-04-29

Organisation #4: Organising yourself

Lecture content
Objective: have a todo list based on org mode
Steps
Configure the "org-directory" to be ~/ungleich-learning-circle/USERNAME/
This is important as it will be used by the todo function later
Extend your function from the organisation #1 session
Instead of opening a fixed file, we include two variable parts:
The hostname of the machine
The year
Pressing F3 should open ~/ungleich-learning-circle/USERNAME/learning-$(hostname)-$(year).org
we call this "your personal agenda"
Configure mu4e to create a org-mode tasks from an email
Store these tasks in ~/ungleich-learning-circle/USERNAME/todo.org
Configure emacs to open the "org-agenda" with "C-c a"
List all TODO entries
List the agenda of the day
List the agenda of the week
Bind F8 to open the "org-todo-list"
Create some sample tasks in it
From now on, maintaining tasks should be
Pressing F3 to open your personal "logfile"
Adding a TODO item
Pressing F8 to see the tasks with priorities
Bonus tasks
Configure mu4e to store org-mode tasks in …/todo-$(hostname)-$(year).org

2020-04-27

Organisation #3: Managing your emails

Lecture content
Objective
Be able to manage all your mails in mu4e
Description
All email is synchronised using isync/mbsync
Email is indexed with mu (xapian backend)
Email is viewed in mu4e
All new emails arrive in the inbox
Steps
Install mu4e
Start mu4e in emacs
Configure mbsync for your ungleich mail account
Synchronise all mails into ~/Maildir/ungleich
This structure leaves room for other mail accounts, like ~/Maildir/gmail
Verify that mbsync synchronises the mail
Index mails using `mu` on the command line (only first time)
Configure mu4e to get email with mbsync -a
Configure mu4e to "archive" emails into ~/Maildir/ungleich/YEAR/
This gives you a good performance / organisation for the next decades
Configure mu4e/emacs for sending emails
Send other participants an email via mu4e
Verify that it arrives
"Archive" it afterwards

2020-04-24

Organisation #2: Creating, managing and sharing with "magit"

Lecture content
Install "magit" for emacs
Bind C-x g to open magit-status in ~/.emacs
Create a new directory ~/ungleich-learning-circle/ (with emacs)
Use C-h b in dired mode to find out how to
Create a sub directory ~/ungleich-learning-circle/YOURNAME/ (with emacs)
Move your previously created learning.org file into ~/ungleich-learning-circle/YOURNAME/ (with emacs)
Initialise it with git (with magit)
Create the repo "ungleich-learning-circle" on code.ungleich.ch under your username
Add your remote on code.ungleich.ch to your local git repo with magit
Push your repo
Add a new remote of a another participant
Move your ~/learning.org to ~/notes
Commit that file with magit
Push the repo with magit
Merging the remote repo with the command line
End result: everyone has everything of everyone else

2020-04-23

Organisation #1: org-mode introduction

Lecture content
Install emacs
Install org-mode
Create a function that opens ~/learning.org in your ~/.emacs
Bind that function to "f3" (configure it in .emacs)
Create a new item named "2020-04-10"
Create a sub item "ungleich learning circle"