diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..7c8be5ee --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,22 @@ +# Pull Request + +## Goal +Short summary of the goal of changes. + +## Changes +Short summary of what was changed in code/documentation. + +## Type of change +- [ ] Bug fix +- [ ] New feature +- [ ] Documentation update + +## Testing +Explain how you tested your changes. + +## Checklist +- [ ] Code follows project style +- [ ] Code is fully tested +- [ ] Documentation (inline and separate) updated if needed +- [ ] No redundant files are committed +- [ ] No secrets are committed \ No newline at end of file diff --git a/.github/workflows/github-actions-demo.yml b/.github/workflows/github-actions-demo.yml new file mode 100644 index 00000000..d9e5f238 --- /dev/null +++ b/.github/workflows/github-actions-demo.yml @@ -0,0 +1,54 @@ +name: GitHub Actions Demo +run-name: ${{ github.actor }} is testing out GitHub Actions πŸš€ +on: + push: + workflow_dispatch: +jobs: + Explore-GitHub-Actions: + runs-on: ubuntu-latest + steps: + - run: echo "πŸŽ‰ The job was automatically triggered by a ${{ github.event_name }} event." + - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!" + - run: echo "πŸ”Ž The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}." + - name: Check out repository code + uses: actions/checkout@v5 + - run: echo "πŸ’‘ The ${{ github.repository }} repository has been cloned to the runner." + - run: echo "πŸ–₯️ The workflow is now ready to test your code on the runner." + - name: List files in the repository + run: | + ls ${{ github.workspace }} + - run: echo "🍏 This job's status is ${{ job.status }}." + + System-Information: + runs-on: ubuntu-latest + steps: + - name: Display System Information + run: | + echo "=== Operating System Information ===" + uname -a + cat /etc/os-release + echo "" + echo "=== CPU Information ===" + lscpu + echo "" + echo "=== Memory Information ===" + free -h + echo "" + echo "=== Disk Space ===" + df -h + echo "" + echo "=== Environment Variables ===" + echo "Runner OS: ${{ runner.os }}" + echo "Runner Architecture: ${{ runner.arch }}" + echo "Runner Name: ${{ runner.name }}" + echo "Runner Tool Cache: ${{ runner.tool_cache }}" + echo "" + echo "=== Installed Software ===" + echo "Python version:" + python3 --version + echo "Node.js version:" + node --version + echo "Docker version:" + docker --version + echo "Git version:" + git --version diff --git a/labs/img/cpu.png b/labs/img/cpu.png new file mode 100644 index 00000000..9f5bb7cf Binary files /dev/null and b/labs/img/cpu.png differ diff --git a/labs/img/disk.png b/labs/img/disk.png new file mode 100644 index 00000000..6c0e17e8 Binary files /dev/null and b/labs/img/disk.png differ diff --git a/labs/img/kernel.png b/labs/img/kernel.png new file mode 100644 index 00000000..ffe5a245 Binary files /dev/null and b/labs/img/kernel.png differ diff --git a/labs/img/network.png b/labs/img/network.png new file mode 100644 index 00000000..787b6943 Binary files /dev/null and b/labs/img/network.png differ diff --git a/labs/img/os.png b/labs/img/os.png new file mode 100644 index 00000000..96710058 Binary files /dev/null and b/labs/img/os.png differ diff --git a/labs/img/ram.png b/labs/img/ram.png new file mode 100644 index 00000000..66f228a8 Binary files /dev/null and b/labs/img/ram.png differ diff --git a/labs/img/route.png b/labs/img/route.png new file mode 100644 index 00000000..6b5b5ddd Binary files /dev/null and b/labs/img/route.png differ diff --git a/labs/img/virtualization.png b/labs/img/virtualization.png new file mode 100644 index 00000000..368a3fb5 Binary files /dev/null and b/labs/img/virtualization.png differ diff --git a/labs/img/virtualization_device.png b/labs/img/virtualization_device.png new file mode 100644 index 00000000..ba72fdd0 Binary files /dev/null and b/labs/img/virtualization_device.png differ diff --git a/labs/img/vm_box.png b/labs/img/vm_box.png new file mode 100644 index 00000000..e4c14e8f Binary files /dev/null and b/labs/img/vm_box.png differ diff --git a/labs/submission5.md b/labs/submission5.md new file mode 100644 index 00000000..73c945cd --- /dev/null +++ b/labs/submission5.md @@ -0,0 +1,111 @@ +# Lab 5 Submission + +## Task 1 β€” VirtualBox Installation + +Host operating system: macOS Sonoma 14.4 +VirtualBox version: Version 7.2.6 r172322 + +Below you could see image that proves that VirtualBox with specified version is installed: +![VirtualBox Installation](img/vm_box.png) + +No issues were encountered during installation. + +## Task 2 β€” Ubuntu VM and System Analysis + +### 2.0 VM Configuration + +VM configuration: +- RAM: 4GB +- Storage: 25GB +- CPU: 2 cores +- OS Version: Ubuntu 25.10 (ARM 64-bit) + +### 2.1 CPU details +Command used: `lscpu` +Why: Displays CPU architecture, CPU count, vendor, core/thread topology, and low-level processor details in one command. +Result: +- Architecture: `aarch64` (64-bit) +- CPU(s): `2` +- Vendor ID: `Apple` +- Threads per core: `1`, cores per cluster: `2` +- Confirms ARM-based virtual machine CPU characteristics. +![CPU Details](img/cpu.png) + +### 2.2 Memory information +Command used: `free -h` +Why: Shows total, used, free, and available RAM in human-readable units. +Result: +- Total RAM: `3.8Gi` +- Used RAM: `2.1Gi` +- Free RAM: `81Mi` +- Available RAM: `1.7Gi` +- Swap: `0B` +![Memory Information](img/ram.png) + +### 2.3 Network configuration +Commands used: `ip a`, `ip route` +Why: +- `ip a` lists interfaces and assigned IP addresses. +- `ip route` shows routing table and default gateway. +Result: +- Active interface: `enp0s8` +- IPv4 address: `10.0.2.15/24` +- Loopback interface `lo` is present +- Default gateway: `10.0.2.2` via `enp0s8` +![Network Interfaces](img/network.png) +![Routing Table](img/route.png) + +### 2.4 Storage information +Command used: `df -hT` +Why: Reports mounted filesystems, filesystem types, size, used/free space, and mount points. +Result: +- Main root filesystem: `/dev/sda2` (`ext4`) +- Root size: `24G`, used: `6.2G`, available: `17G` (`28%` used) +- EFI partition: `/dev/sda1` (`vfat`) mounted on `/boot/efi` +![Storage Information](img/disk.png) + +### 2.5 Operating system +Commands used: `cat /etc/os-release`, `uname -r`, `uname -a` +Why: +- `/etc/os-release` provides distribution/version identity. +- `uname -r` shows kernel release. +- `uname -a` shows full kernel/system/architecture string. +Result: +- Distribution: `Ubuntu 25.10 (Questing Quokka)` +- Kernel version: `6.17.0-14-generic` +- Architecture in kernel output: `aarch64` / `arm64` +![OS Release](img/os.png) +![Kernel Information](img/kernel.png) + +### 2.6 Virtualization detection +Commands used: `systemd-detect-virt`, `hostnamectl`, `dmesg | grep -i virtual` +Why: +- `systemd-detect-virt` attempts to detect known virtualization providers. +- `hostnamectl` can show virtualization information on many setups. +- `dmesg | grep -i virtual` searches kernel boot/runtime logs for virtualization-related drivers and device names. +Result: +- `systemd-detect-virt` returned `none`. +- `hostnamectl` showed OS/kernel/architecture, but no explicit virtualization field in this output. +- `dmesg | grep -i virtual` returned multiple entries containing `VirtualBox` (USB keyboard, USB tablet, mouse integration), which confirms VirtualBox virtual hardware is present. + +![Virtualization Detection](img/virtualization.png) +![Virtualization Device Evidence](img/virtualization_device.png) + +Why we got such results: +1. ARM64 vs x86_64 discovery path + Traditional VM detection tools often depend on DMI/SMBIOS metadata commonly available on x86_64 platforms. On ARM64 systems (like Apple Silicon), hardware discovery is often exposed differently, so those legacy identifiers may be absent. +2. VirtualBox behavior on Apple Silicon + On M1/M2 Macs, VirtualBox integrates with Apple’s hypervisor stack and may not expose the same classic VirtualBox signatures (for example, `VBOX` DMI strings) that Linux detection tools commonly match. +3. Why `dmesg` was successful + `dmesg` reads kernel messages directly, including driver and device initialization logs. Even when high-level virtualization metadata is missing, kernel logs still recorded attached virtual devices labeled as `VirtualBox`, which provided direct practical evidence of virtualization. + +### 2.7 Reflection +The most useful tools in this lab were: + +- `lscpu` β€” best single command for CPU analysis because it summarizes architecture, core count, and processor topology clearly. +- `free -h` β€” fastest way to understand memory state in human-readable units without extra parsing. +- `ip a` + `ip route` β€” most practical networking pair: first shows interface/IP assignment, second confirms gateway and actual routing behavior. +- `df -hT` β€” very useful for storage checks because it combines capacity, usage, filesystem type, and mount point in one output. +- `/etc/os-release` + `uname` β€” reliable combination to separate distribution-level information from kernel-level details. + +For virtualization detection in this specific ARM VirtualBox-on-macOS setup, the most useful final proof was `dmesg | grep -i virtual`, because kernel logs exposed `VirtualBox` device strings even when high-level detection commands returned no explicit virtualization status. \ No newline at end of file