* 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) ***** 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"