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

14 KiB

2020-05-13

cdist #5: Generating Code & Exploring

Lecture content
Objective
  • Understand how to generate code and when to use it
  • Exploring explorers
Code generation steps
  • Modify the previously created type __my_nginx_site
  • Read about cdist messaging
  • If there was a change in the nginx configuration file, reload nginx
Explorer steps
  • 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
Documentation
  • 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)
Use both types in the initial manifest to configure the target host
Create at least two domains
Configure the target host
Verify that the configuration files are properly created
Delete the nginx package manually on the target host
Comment out __my_nginx from the initial manifest, keep the __my_nginx_site
Explain the error that you get (in your cdist.org file)

2020-05-08

cdist #3: type parameters

Lecture content
TODO Create a new type named __colourful_file
TODO The objective is to create a type that creates colourful file
TODO The content of the file should be "colour=…", where "…" is a colour specified by a parameter
TODO Add an optional parameter named colour
TODO Use the __file type inside your type to create a file
TODO Use the $__object_id variable inside your type
TODO Extend your type to be more colourful
TODO Modify the optional parameter to be able to be specified multiple times
TODO For each time it is specified, add a line "colour=…" to the file
TODO Create a new type __my_dotfiles
TODO Objective is to manage the dotfiles in your home directory
TODO Make it a singleton type
TODO Create a sub directory files in the type
TODO Add your .emacs config to the files folder
TODO Add a for loop to your type to deploy .[A-z]* to your home directory
TODO Add a .bashrc or .zshrc to the files folder (depending on your shell)
TODO In the initial manifest, add __my_dotfiles when the target host is localhost
TODO As usual commit all changes to your ungleich-learning-circle repo

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"