This repository attempts to provide an introduction to Linux for developers who are already familiar with computer systems and programming in general. We will learn through Interprocess Communication on Linux using Unix Domain Sockets.
- Setup Development Environment
- Create the Host (Ubuntu VM on Azure)
- Setup SSH Connectivity
- Provision packages required for development
- Setup remote session on VSCode
- Basic introduction to Linux
- Security 101
- Users, Groups
- PAM, NSSwitch
- Basic tools (whoami, id etc.)
- Networking 101
- Logging
- Process Management
- UNIX Shell(s)
- Some basic commands
- Security 101
- Develop a Hello World Program using C
- Introduction to GDB
- Introduction to the UNIX process model
- Introduction to POSIX threads
- Introduction to Signals
- Develop a multi-threaded client/server app using Unix Domain Sockets
- Basic introduction to auto-tools (Autoconf/Automake/Configure/Make)
- Develop the server
- Develop the client
- Develop the command line interface that links with the client
- Extend the Server to use syslog.
- Verify using journalctl.
- Extend the Server to use a JSON based config file.
- Define a signal handler that responds to SIGUSR1 to refresh the config file.
- Convert the service to gRPC
- Introduction to CMake
- Convert the service to use CMake instead of auto-tools
- Introduction to UNIX daemons
- Convert the serfvice to be a UNIX daemon
- Introduction to Redhat Package Manager (RPM)
- Build an RPM for the service
- Introduction to systemd
- Define the gRPC server as a systemd service
- Ensure the service is started automatically upon installation
- Ensure the service is automatically removed upon uninstallation
- Debug the running service
- Debug from core
- Introduction to performance tools on Linux
- Resources on building infrastructure
- Training
- Books
- Advanced Programming in the Linux Environment by Richard L. Stevens
- UNIX Network Programming Volumes 1 & 2