Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -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
54 changes: 54 additions & 0 deletions .github/workflows/github-actions-demo.yml
Original file line number Diff line number Diff line change
@@ -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
Binary file added labs/img/cpu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/disk.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/kernel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/network.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/os.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/ram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/route.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/virtualization.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/virtualization_device.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labs/img/vm_box.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
111 changes: 111 additions & 0 deletions labs/submission5.md
Original file line number Diff line number Diff line change
@@ -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.