start restructuring

This commit is contained in:
waldek 2021-03-31 13:52:10 +02:00
parent 086b48a665
commit 6e011ab399
6 changed files with 236 additions and 307 deletions

View File

@ -0,0 +1,232 @@
# Linux essentials [source](https://github.com/sudomateo/lsa-i/tree/master/docs/linux-essentials)
1. Change into the `/tmp` directory using the command `cd /tmp`.
2. Confirm you are in the `/tmp` directory using the command `pwd`.
3. Change back into your home directory using the command `cd`.
4. Confirm you are in your home directory using the command `pwd`.
5. Print the text `This is file01.` to the file `/tmp/file01` using the command `echo "This is file01." > /tmp/file01`.
6. Confirm the `/tmp/file01` file has the correct content using the command `cat /tmp/file01`.
7. Append the text `This is appended.` to the file `/tmp/file01` using the command `echo "This is appended." >> /tmp/file01`.
8. Confirm the `/tmp/file01` file has the updated content using the command `cat /tmp/file01`.
9. Send the output of the `printenv` command to a new file named `/tmp/myenv` using the command `printenv > /tmp/myenv`.
10. View the first five lines of the `/tmp/myenv` file using the command `head -n 5 /tmp/myenv`.
11. Declare and export a new environment variable with the command `export COURSE_NAME="LSA1"`.
12. Verify your newly exported environment variable exists using the command `printenv | grep COURSE_NAME`.
13. Practice these and other commands until you feel comfortable with them.
14. When finished, use the `exit` command to exit the shell and logout.
# Managing files [source](https://lsa-i.sudomateo.com/managing-files/)
1. Create a directory for these exercises by using the command `mkdir /tmp/managing-files`.
2. Change into the newly created directory using the command `cd /tmp/managing-files`.
3. Create six empty files using the command `touch file{01..06}`.
4. Run each of the following commands to change the permissions of each file. See if you can guess what the permissions will be before you run each command:
1. `chmod 764 file01`
2. `chmod 400 file02`
3. `chmod 651 file03`
4. `chmod 4744 file04`
5. `chmod 4664 file06`
6. `chmod 1444 file06`
5. Run the command `ls -l`. You should see output similar to the following.
```
$ ls -l
total 0
-rwxrw-r--. 1 vagrant vagrant 0 Aug 23 01:10 file01
-r--------. 1 vagrant vagrant 0 Aug 23 01:10 file02
-rw-r-x--x. 1 vagrant vagrant 0 Aug 23 01:10 file03
-rwsr--r--. 1 vagrant vagrant 0 Aug 23 01:10 file04
-rw-rw-r--. 1 vagrant vagrant 0 Aug 23 01:10 file05
-r--r--r-T. 1 vagrant vagrant 0 Aug 23 01:10 file06
```
6. Run the commmand `tar -zcvf /tmp/managing-files.tgz -C /tmp/managing-files .` to create an archive named `/tmp/managing-files.tgz` of all the files in the `/tmp/managing-files` directory.
7. Run the command `rm -f file0*` to remove all six files that were created earlier. Verify the files were removed using the command `ls -l`.
8. Run the command `tar -zxvf /tmp/managing-files.tgz -C /tmp/managing-files` to extract the contents of your archive back into the `/tmp/managing-files` directory.
9. Verify the files were restored correctly using the command `ls -l`. You should see output similar to the following. **NOTE: `tar` does not restore special permissions (SUID, SGID, sticky bit) so you will only see the read, write, and execute permissions.**
```
$ ls -l
total 0
-rwxrw-r--. 1 vagrant vagrant 0 Aug 23 01:10 file01
-r--------. 1 vagrant vagrant 0 Aug 23 01:10 file02
-rw-r-x--x. 1 vagrant vagrant 0 Aug 23 01:10 file03
-rwxr--r--. 1 vagrant vagrant 0 Aug 23 01:10 file04
-rw-rw-r--. 1 vagrant vagrant 0 Aug 23 01:10 file05
-r--r--r--. 1 vagrant vagrant 0 Aug 23 01:10 file06
```
10. Practice these and other commands until you feel comfortable with them.
11. When finished, use the `exit` command to exit the shell and logout.
# Managing software [source](https://lsa-i.sudomateo.com/managing-software/)
1. Install the `screen` package using the command `sudo yum install screen`. Press ++y++ if prompted.
2. Verify the screen package is installed using the command `sudo yum list installed | grep -i screen`. You should see the matching output.
3. Remove the `screen` package using the command `sudo yum remove screen`.
4. Verify the screen package is removed using the command `sudo yum list installed | grep -i screen`. You should see no matching output.
5. Run the command `ps aux` to view all of the processes currently executing on the system.
6. Run the command `top` to view all of the processes and their resource usage. Notice how the output refreshed every 2 seconds. Press ++q++ to quit when done looking around.
7. Run the command `sleep 60`. Press ++ctrl+c++ to quit the command early.
8. Run the command `sleep 15 &` to run `sleep` in the background. Run the `jobs` command to verify the background command is still running. Wait for 15 seconds and run the `jobs` command again to verify that the job is no longer executing in the background.
9. Run the command `sleep 600 &` to run the `sleep 600` command in the background. You will be shown the PID of the background process. Keep a note of this for the next steps.
1. Verify the PID exists using the command `ps aux | grep PID` where `PID` is the PID from earlier.
2. Use the `kill -15 PID` command where `PID` is the PID from earlier to send a `SIGTERM` command to that process.
3. Run the `jobs` command to verify your background process was terminated.
10. Run the command `sleep 444 &` to run the `sleep 444` command in the background. You will be shown the PID of the background process. Keep a note of this for the next steps.
1. Verify the PID exists using the command `ps aux | grep PID` where `PID` is the PID from earlier.
2. Use the `kill -9 PID` command where `PID` is the PID from earlier to send a `SIGKILL` command to that process.
3. Run the `jobs` command to verify your background process was killed.
11. Run the command `sudo yum install epel-release` to install the EPEL repository.
12. Run the command `sudo yum install nginx` to install the nginx webserver. Press ++y++ if prompted.
13. Run the command `sudo systemctl status nginx` to see the status of the nginx webserver. It should show inactive or dead.
14. Run the command `sudo systemctl start nginx` to start the nginx webserver.
15. On your local workstation, open a web browser and navigate to `http://127.0.0.1:8080`. You should see an nginx test page.
16. Run the command `sudo systemctl stop nginx` to stop the nginx webserver.
17. Try to reload the web page on your local workstation. It should not load this time.
18. Verify the nginx service is not running using the command `sudo systemctl status nginx`.
19. Practice these and other commands until you feel comfortable with them.
20. When finished, use the `exit` command to exit the shell and logout.
# Configuring hardware [source](https://lsa-i.sudomateo.com/configuring-hardware/)
1. Drop down to the `root` user using the command `sudo su -`.
2. Verify the `/dev/sdb` and `dev/sdc` devices are attached to your system by running the command `lsblk`. You should see output similar to the following:
```
[root@lsa-i ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 39G 0 part
├─VolGroup00-LogVol00 253:0 0 37.5G 0 lvm /
└─VolGroup00-LogVol01 253:1 0 1.5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
```
3. Run the command `fdisk /dev/sdb` to begin formatting the device `dev/sdb`. Follow the subtasks below to format the device with 1 partition that takes up all the space:
1. Type `n` and hit ++enter++ to create a new partition.
2. Type `p` and hit ++enter++ to make this a primary partition.
3. Type `1` and hit ++enter++ to make this primary partition the first partition on this device.
4. Hit ++enter++ to accept the default first sector.
5. Hit ++enter++ to accept the default last sector.
6. Type `p` and hit ++enter++ to print the proposed partition changes. You should see the partition `/dev/sdb1`.
7. Type `w` and hit ++enter++ to write these changes to the device and exit.
4. Verify the `/dev/sdb1` partition was created successfully by running the command `lsblk`. You should see output similar to the following:
```
[root@lsa-i ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 39G 0 part
├─VolGroup00-LogVol00 253:0 0 37.5G 0 lvm /
└─VolGroup00-LogVol01 253:1 0 1.5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part
sdc 8:32 0 1G 0 disk
```
5. Run the command `mkfs.xfs /dev/sdb1` to create an XFS file system on the `/dev/sdb1` partition.
6. Run the command `lsblk -f` to list the UUID and file system type of the `/dev/sdb1` partition. You'll need this information for the `/etc/fstab` file.
7. Run the command `mkdir /mnt/exercise01` to create a directory to use for mounting the `/dev/sdb1` partition.
8. Add an entry to the `/etc/fstab` file to mount your `/dev/sdb1` device to the `/mnt/exercise01` directory. Your new entry should be similar to the following:
```
UUID=<DEVICE_UUID> /mnt/exercise01 xfs defaults 0 2
```
9. Run the command `mount -a` to read the `/etc/fstab` file and mount all currently unmounted devices.
10. Verify the `/dev/sdb1` partition was mounted successfully by running the `lsblk` command. You should see output simiar to the following:
```
[root@lsa-i ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 39G 0 part
├─VolGroup00-LogVol00 253:0 0 37.5G 0 lvm /
└─VolGroup00-LogVol01 253:1 0 1.5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part /mnt/exercise01
sdc 8:32 0 1G 0 disk
```
11. Run the command `df -h` to see the current disk usage of the system. Take note of the value in the Used column for `/dev/sdb1`. My output is below.
```
[root@lsa-i ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 38G 823M 37G 3% /
devtmpfs 910M 0 910M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.5M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda2 1014M 63M 952M 7% /boot
tmpfs 184M 0 184M 0% /run/user/1000
/dev/sdb1 1020M 33M 988M 4% /mnt/exercise01
```
12. Run the command `dd bs=1M count=50 if=/dev/urandom of=/mnt/exercise01/myfile` to create a file /mnt/exercise01/myfile with a size of around 50 MiB. This command may take a few seconds to run.
13. Run the command `df -h` to see the current disk usage of the system. Take note of the value in the Used column for `/dev/sdb1`. Notice how the value has increased by roughly 50 MiB. My output is below.
```
[root@lsa-i ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 38G 823M 37G 3% /
devtmpfs 910M 0 910M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.5M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda2 1014M 63M 952M 7% /boot
tmpfs 184M 0 184M 0% /run/user/1000
/dev/sdb1 1020M 83M 938M 9% /mnt/exercise01
```
14. Run the command `fdisk /dev/sdc` to begin formatting the device `/dev/sdc`. Follow the subtasks below to format the device with 2 partitions with 256 MiB and 512 MiB respectively:
1. Type `n` and hit ++enter++ to create a new partition.
2. Type `p` and hit ++enter++ to make this a primary partition.
3. Type `1` and hit ++enter++ to make this primary partition the first partition on this device.
4. Hit ++enter++ to accept the default first sector.
5. Type `+256M` and hit ++enter++ to give the partition a size of 256 MiB.
6. Type `p` and hit ++enter++ to print the proposed partition changes. You should see the partition `/dev/sdc1`.
7. Type `n` and hit ++enter++ to create another new partition.
8. Type `p` and hit ++enter++ to make this a primary partition.
9. Type `2` and hit ++enter++ to make this primary partition the second partition on this device.
10. Hit ++enter++ to accept the default first sector.
11. Type `+512M` and hit ++enter++ to give the partition a size of 512 MiB.
12. Type `p` and hit ++enter++ to print the proposed partition changes. You should see the partition `/dev/sdc2`.
13. Type `w` and hit ++enter++ to write these changes to the disk and exit.
15. Verify the `/dev/sdc1` and `/dev/sdc2` partitions were created successfully by running the command `lsblk`. You should see output similar to the following:
```
[root@lsa-i ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 39G 0 part
├─VolGroup00-LogVol00 253:0 0 37.5G 0 lvm /
└─VolGroup00-LogVol01 253:1 0 1.5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part /mnt/exercise01
sdc 8:32 0 1G 0 disk
├─sdc1 8:33 0 256M 0 part
└─sdc2 8:34 0 512M 0 part
```
16. Run the command `mkfs.ext4 /dev/sdc1` to create an EXT4 file system on the `/dev/sdc1` partition.
17. Run the command `mkfs.xfs /dev/sdc2` to create an XFS file system on the `/dev/sdc2` partition.
18. Run the command `lsblk -f` to list the UUIDs and file system types of the `/dev/sdc1` and `/dev/sdc2` partitions. You'll need this information for the `/etc/fstab` file.
19. Run the command `mkdir /mnt/small` to create a directory to use for mounting the `/dev/sdc1` partition.
20. Run the command `mkdir /mnt/large` to create a directory to use for mounting the `/dev/sdc2` partition.
21. Add two entries to the `/etc/fstab` file to mount your `/dev/sdc1` and `/dev/sdc2` devices to the `/mnt/small` and `/mnt/large` directories respectively. Your new entries should be similar to the following:
```
UUID=<DEVICE_UUID> /mnt/small ext4 defaults 0 2
UUID=<DEVICE_UUID> /mnt/large xfs defaults 0 2
```
22. Run the command `mount -a` to read the `/etc/fstab` file and mount all currently unmounted devices.
23. Verify the `/dev/sdc1` and `/dev/sdc2` partitions were mounted successfully by running the `lsblk` command. You should see output simiar to the following:
```
[root@lsa-i ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 39G 0 part
├─VolGroup00-LogVol00 253:0 0 37.5G 0 lvm /
└─VolGroup00-LogVol01 253:1 0 1.5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part /mnt/exercise01
sdc 8:32 0 1G 0 disk
├─sdc1 8:33 0 256M 0 part /mnt/small
└─sdc2 8:34 0 512M 0 part /mnt/large
```
24. Practice these and other commands until you feel comfortable with them. You'll need to run `vagrant destroy` and then `vagrant up` to reset your virtual machine if you wish to do these exercises over.
25. When finished, use the exit command to exit the shell and logout.

View File

@ -1,10 +0,0 @@
## Follow up of personal project
* **Id:** personal_project.followup
* **Effort:** 2.0
## Presentation of personal projects
* **Id:** personal_project.presentation
* **Effort:** 1.0

301
readme.md
View File

@ -1,300 +1,7 @@
---
# Bruxelles Formation - Linux course
# Prerequisite Modules
* **Note:** Not part of the reference but essential for the course.
* **Id:** prerequisite
* **Effort:** 3.5
This repository houses all documentation for the linux course organized by Bruxelles Formation at IRISIB.
The course runs for about six [months](https://taskjuggler.86thumbs.net), is divided into three main [modules](modules) and aims at passing three [certificates](certificates).
Each student also has to complete a [personal project](personal_project).
## Classes
* **Id:** prerequisite.theory
* **Effort:** 1.8
### Overview of communication channels
* **Note:** Account creation for gitea, matrix etc
* **Id:** prerequisite.theory.communication
* **Effort:** 0.5
### Introduction to markdown for notekeeping
* **Note:** markdown syntax
* **Id:** prerequisite.theory.markdown
* **Effort:** 0.3
### Short introdution to git for notekeeping
* **Note:** git tutorial
* **Id:** prerequisite.theory.git
* **Effort:** 1.0
---
# Resource Modules
* **Note:** Modules part of the resource curriculum.
* **Id:** resources
* **Effort:** 30.4
## Networking
* **Id:** resources.networking
* **Effort:** 15.5
### MR03/R61 Introduction to centralized administration of networking services
* **Id:** resources.networking.services
* **Effort:** 6.8
### Classes
* **Id:** resources.networking.services.theory
* **Effort:** 2.5
### Debian implementations of essential services
* **Note:** Focus on DHCP, DNS, SFTP, SSH, CUPS, LDAP following chapter 10 and chapter 11 of the Debian system administrator handbook
* **Id:** resources.networking.services.theory.debian
* **Effort:** 2.5
## MR04/R71 Introduction to linux
* **Note:** Introduction to the history and usage of Linux as an OS with both graphical and shell interfaces.
* **Id:** resources.linux
* **Effort:** 5.0
### Classes
* **Id:** resources.linux.theory
* **Effort:** 3.0
### History of unix/linux and Debian
* **Id:** resources.linux.theory.intro
* **Effort:** 0.5
### Quick dive into a GUI installation
* **Id:** resources.linux.theory.gui
* **Effort:** 0.5
### Introduction to the shell
* **Note:** Based on Ryan's tutorials
* **Id:** resources.linux.theory.cli
* **Effort:** 1.0
### Introduction to vim
* **Note:** complete vimtutor and create a custom vimrc
* **Id:** resources.linux.theory.vimtutor
* **Effort:** 0.5
### Very brief introdution to bandit and SSH
* **Note:** bandit
* **Id:** resources.linux.theory.bandit
* **Effort:** 0.5
## MR05/XX Introduction to hardware components of servers and clients
* **Note:** In this module we will focus on hardware and the exposure to Raspberry Pi's as an alternative target platform
* **Id:** resources.hardware
* **Effort:** 6.0
### Classes
* **Id:** resources.hardware.theory
* **Effort:** 2.5
### Breakdown of IT internals and externals
* **Id:** resources.hardware.theory.breakdown
* **Effort:** 0.5
### Overview of computer architectures
* **Id:** resources.hardware.theory.architectures
* **Effort:** 0.3
### ARM vs x86
* **Id:** resources.hardware.theory.rpi
* **Effort:** 0.3
### Introduction to compiled languages and compilation targets
* **Id:** resources.hardware.theory.compilation
* **Effort:** 0.3
### Comparison of platforms vs protocols
* **Id:** resources.hardware.theory.protocols
* **Effort:** 0.3
### Group deployment of RPI clients and headless servers
* **Id:** resources.hardware.theory.deployment
* **Effort:** 1.0
---
# Qualifying Modules
* **Note:** Modules part of the qualifying curriculum.
* **Id:** qualifying
* **Effort:** 67.0
## MQ06/QB2 Install, deplay, configure and maintain client machines
* **Id:** qualifying.clients
* **Effort:** 5.0
### Classes
* **Id:** qualifying.clients.theory
* **Effort:** 2.0
### TODO
* **Note:** TODO
* **Id:** qualifying.clients.theory.sub1
* **Effort:** 2.0
### Labo
* **Id:** qualifying.clients.practice
* **Effort:** 2.0
### Labo one
* **Note:** TODO
* **Id:** qualifying.clients.practice.supervised
* **Effort:** 1.0
## MQ03/QB4 Conceive and improve networking architecture
* **Note:** Deep dive into networking and the securisation of exposed services.
* **Id:** qualifying.networking
* **Effort:** 21.3
### Classes
* **Id:** qualifying.networking.theory
* **Effort:** 11.5
### iptables and fail2ban
* **Id:** qualifying.networking.theory.firewall
* **Effort:** 1.0
### Introduction to cryptography
* **Id:** qualifying.networking.theory.crypto
* **Effort:** 1.0
### Theory and application of OpenWRT
* **Id:** qualifying.networking.theory.openwrt
* **Effort:** 1.0
### Exposing local services to the internet
* **Note:** Theory and application of VPN, nginx reverse proxy, SSH, DNS and dynamic DNS
* **Id:** qualifying.networking.theory.exposing_services
* **Effort:** 3.5
## Linux server machines
* **Id:** qualifying.servers
* **Effort:** 26.8
### MQ07/QE7 Installation and configuration of a Linux server
* **Note:** Installation and configuration of Debian and Redhat servers.
* **Id:** qualifying.servers.deployment
* **Effort:** 9.1
### Classes
* **Id:** qualifying.servers.deployment.theory
* **Effort:** 6.0
### The Debian OS
* **Note:** Follows the Debian System Administrator handbook
* **Id:** qualifying.servers.deployment.theory.debian
* **Effort:** 4.0
### Redhat as an alternative
* **Id:** qualifying.servers.deployment.theory.redhat
* **Effort:** 2.0
### Labo
* **Id:** qualifying.servers.deployment.practice
* **Effort:** 3.0
### Deployment of Debian on hardware and VM
* **Note:** TODO
* **Id:** qualifying.servers.deployment.practice.debian
* **Effort:** 2.0
### Test
* **Note:** Test through certificate
* **Id:** qualifying.servers.deployment.test
* **Effort:** 0.1
### Linux Professional Institute LPIC-1
* **Note:** https://www.lpi.org/our-certifications/lpic-1-overview
* **Id:** qualifying.servers.deployment.test.certificate
* **Effort:** 0.1
### MQ08/QE8 Administrate, exploit and maintain a Linux server
* **Note:** More in depth usage of the command line and an introdution to scripting in BASH and python3.
* **Id:** qualifying.servers.maintenance
* **Effort:** 17.6
### Classes
* **Id:** qualifying.servers.maintenance.theory
* **Effort:** 14.0
### Deep dive into CLI tools
* **Note:** Focus on essential tools such as tmux, zsh, ohmyzsh, vim
* **Id:** qualifying.servers.maintenance.theory.tools
* **Effort:** 3.0
### Advanced system management
* **Note:** Focus on systemd, dbus, udev, apt, pip3
* **Id:** qualifying.servers.maintenance.theory.debian
* **Effort:** 4.0
### Introduction to scripting in BASH and python3
* **Id:** qualifying.servers.maintenance.theory.scripting
* **Effort:** 5.0
### Advanced python scripting
* **Id:** qualifying.servers.maintenance.theory.advanced_python
* **Effort:** 2.0
### Labo
* **Id:** qualifying.servers.maintenance.practice
* **Effort:** 3.5
### Tools and system maintenance in practice
* **Id:** qualifying.servers.maintenance.practice.general
* **Effort:** 2.5
## MQ09/XX Administrate, exploit and maintain a virtual environnement
* **Note:** Extends on the general knowledge built up throughout the coarse but adds freenas as a platform to deploy VM's
* **Id:** qualifying.vm
* **Effort:** 6.0
### Classes
* **Id:** qualifying.vm.theory
* **Effort:** 2.5
### General configuration of VM's
* **Id:** qualifying.vm.theory.general
* **Effort:** 0.5
### Freenas as a platform to deploy VM's and docker instances
* **Id:** qualifying.vm.theory.freenas
* **Effort:** 2.0
### Labo
* **Id:** qualifying.vm.practice
* **Effort:** 2.5
### Deployment of diverse VM's via Windows, Debian and Freenas
* **Id:** qualifying.vm.practice.supervised
* **Effort:** 0.5
---
# Personal project
* **Note:** Research, write and present an expose on a relevant topic of choice.
* **Id:** personal_project
* **Effort:** 7.0
## Follow up of personal project
* **Id:** personal_project.followup
* **Effort:** 2.0
## Presentation of personal projects
* **Id:** personal_project.presentation
* **Effort:** 1.0
---
# Certificates
* **Id:** certificates
* **Effort:** 11.0
## In class followup for certifications with supervision
* **Id:** certificates.supervised
* **Effort:** 3.0
## Passing the certificate
* **Id:** certificates.test
* **Effort:** 1.0