@ -0,0 +1,29 @@
|
||||
# BIOS Configuration |
||||
|
||||
## Steps |
||||
|
||||
<kbd>F10</kbd> (Open Setup) |
||||
|
||||
- _Security_ |
||||
- _Create BIOS Administrator Password_ → Set password |
||||
- _Advanced_ |
||||
- _Boot Options_ |
||||
- _USB Storage Boot_ → Disabled |
||||
- _Fast Boot_ → Disabled (disturbs network boot) |
||||
- _Audio Alerts During Boot_ → Disabled (very noisy) |
||||
- _HP Sure Recover_ |
||||
- _HP Sure Recover_ → Disabled (tries to restore Windows) |
||||
- _Secure Boot Configuration_ |
||||
- _Configure Legacy Support and Secure Boot_ → «Legacy Support Disable and Secure Boot Disable» (**TODO**: use Secure Boot) |
||||
|
||||
<kbd>F10</kbd> → Yes (Save changes & Reboot) |
||||
|
||||
> Enter the code that the BIOS asks to disable the secure boot |
||||
|
||||
## Automation |
||||
|
||||
- Can be automated using Intel vPro/AMT (**TODO**) |
||||
- Can be partially automated with a USB programmable keyboard such as : |
||||
- [USB Rubber Ducky](https://shop.hak5.org/products/usb-rubber-ducky-deluxe) |
||||
- [XK-24 USB Programmable Keypad for Windows or Mac](https://www.amazon.com/gp/product/B003MB780E) |
||||
- [Cactus WHID: WiFi HID Injector USB Rubberducky](https://www.tindie.com/products/aprbrother/cactus-whid-wifi-hid-injector-usb-rubberducky/) |
Before Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 147 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 146 KiB |
After Width: | Height: | Size: 185 KiB |
After Width: | Height: | Size: 189 KiB |
After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 212 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 145 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 120 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 135 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 139 KiB |
After Width: | Height: | Size: 135 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 63 KiB |
@ -1,20 +1,21 @@
|
||||
# Object Attribute Reference |
||||
|
||||
## List all **USABLE** preset object attributes |
||||
|
||||
| Attribute | Type | Value | Description | |
||||
|-------------------|-----------|-------|-------------| |
||||
| `xp` | function | `exerciceExpCalculation`, `examExpCalculation` or `raidExpCalculation` | Amount of exeperience points that an object will give. | |
||||
| `correctionPrice` | function | `correctionPrice` | Amount of correction points needed to test an exercise. | |
||||
| `duration` | number | | | |
||||
| `time` | string | | | |
||||
| `info` | object | | | |
||||
| Attribute | Type | Value | Description | |
||||
| ----------------- | -------- | ---------------------------------------------------------------------- | ------------------------------------------------------- | |
||||
| `xp` | function | `exerciceExpCalculation`, `examExpCalculation` or `raidExpCalculation` | Amount of experience points that an object will give. | |
||||
| `correctionPrice` | function | `correctionPrice` | Amount of correction points needed to test an exercise. | |
||||
| `duration` | number | | | |
||||
| `time` | string | | | |
||||
| `info` | object | | | |
||||
|
||||
## List all **RESERVED** preset object attributes |
||||
|
||||
| Attribute | Type | Value | Description | |
||||
|-------------------|-----------|-------|-------------| |
||||
| `scopeStart` | function | | | |
||||
| `scopeEnd` | function | | | |
||||
| `startDay` | function | | | |
||||
| `status` | function | | | |
||||
| `week` | function | | | |
||||
| Attribute | Type | Value | Description | |
||||
| ------------ | -------- | ----- | ----------- | |
||||
| `scopeStart` | function | | | |
||||
| `scopeEnd` | function | | | |
||||
| `startDay` | function | | | |
||||
| `status` | function | | | |
||||
| `week` | function | | | |
||||
|
@ -0,0 +1,30 @@
|
||||
# OS Deployment |
||||
|
||||
## Image creation steps |
||||
|
||||
- [Installation of Ubuntu](ubuntu-installation.md) |
||||
- minimal OS installation (downloads ~200 MB) |
||||
- Software installation (downloads ~900 MB) |
||||
- Optimization |
||||
- improve speed |
||||
- reduce image size |
||||
- reduce power (CPU) & memory usage |
||||
- reduce surface of attack |
||||
- reduce bandwidth usage |
||||
- Customization |
||||
- machine-dependent (drivers, bug workarounds...) |
||||
- time zone of the school |
||||
- school scripts |
||||
- Cleaning |
||||
- logs |
||||
- temporary files |
||||
- histories |
||||
- caches |
||||
- auto-generated IDs |
||||
- Preparation of the disk image |
||||
- zero unallocated space of filesystem (~7 GB of data remains) |
||||
- (optional) create compressed image with [lz4](https://lz4.github.io/lz4) (the resulting image is ~3.2 GB) |
||||
|
||||
## Network installation |
||||
|
||||
- Boot through PXE [UDPcast](http://udpcast.linux.lu) which allows an efficient transfer of the disk image (using multicast or broadcast) |
@ -0,0 +1,37 @@
|
||||
# Principles |
||||
|
||||
## Make a simple system (less complexity) |
||||
|
||||
Rationale : |
||||
|
||||
- Reduce the number of potential bugs and problems |
||||
- The remaining bugs will be easier to identify/isolate & fix |
||||
- Easier maintenance |
||||
- Lower human capital required |
||||
|
||||
## Limit security & filtering mechanisms |
||||
|
||||
Especially during the launch, rationale : |
||||
|
||||
- Reduce complexity (see above) |
||||
- Alem is a school, not a bank, so the security requirements are lower |
||||
- Some students will be able to bypass security systems in all cases |
||||
- And they will spread the word quickly |
||||
- The only reliable way to identify students will be security cameras and staff attention |
||||
- Students will share accounts and USB drives |
||||
- They will open connections to the outside and there is no definitive way to prevent this |
||||
- We will "hire" the students who have found vulnerabilities using technical skills and creativity |
||||
- We cannot anticipate every breach hundreds of students will find & exploit |
||||
- Focus on endpoint security rather than network security (firewall on each node) |
||||
- Reduce complexity of the network and make it more flexible |
||||
|
||||
## Promote open, neutral network & technologies |
||||
|
||||
Rationale : |
||||
|
||||
- Students will spend more time learning things and exchanging ideas than bypassing censorship |
||||
- Students will have more extensive knowledge and skills |
||||
- It is better to make them aware of their situation than to try to stop them |
||||
- A student's motivation is very much influenced by his or her environment |
||||
- An environment with limitations will limit the spectrum of things that stimulate the student's curiosity |
||||
- A focus will made on increasing student's empowerement in order to make them feel accountable for their own actions. If the student cheats, he has to understand that he is only hindering his own progress. |
@ -0,0 +1,31 @@
|
||||
# Responsibilities |
||||
|
||||
## Alem |
||||
|
||||
- Hardware |
||||
- Maintenance & replacement of parts |
||||
- HP machines |
||||
- Inventory (associates MAC address or other ID to the physical location of the machine) |
||||
- [BIOS configuration](bios-configuration.md) |
||||
- Connected on Ethernet network |
||||
- Audio & USB extension cables (to protect the PC ports) |
||||
- Computers & cables are physically attached to the table (to prevent stealing or damage) |
||||
- Monitor brightness (the default might be too high and it cannot be controlled by software) |
||||
- Server (virtualized with at least these dedicated resources) |
||||
- CPU : 8 threads |
||||
- RAM : 64 GB |
||||
- SSD : 512 GB |
||||
- NIC : pass-through or bridged ? (see with Vitalii) |
||||
- Software |
||||
- DHCP |
||||
- DNS |
||||
- PXE |
||||
- Image creation & deployment (with the help of team 01) |
||||
|
||||
## 01 |
||||
|
||||
- Software maintenance |
||||
- Implement the features requested or identified at the Alem School |
||||
- Bug fix |
||||
- Technical advice |
||||
- Pedagogical support |
@ -0,0 +1,11 @@
|
||||
# Tasks |
||||
|
||||
- [x] Install, connect, check the server and the HP clients (_Alem_, _Vitalii_) |
||||
- [x] Check the settings of the virtual machine (_01_, _Vitalii_) |
||||
- [x] Install the server (_01_, _Vitalii_) |
||||
- [x] Tests & benchmark of the server (_01_) |
||||
- [x] Test the [OS deployment](https://github.com/01-edu/public/blob/master/docs/os-deployment.md) (_01_, _Vitalii_) |
||||
- [ ] Write process documentation (_01_, _Alem_, _Vitalii_) |
||||
- [ ] Ensure the tester only works inside the school (_01_, _Alem_) |
||||
- [ ] Ensure the exam app works as expected (_01_, _Alem_) |
||||
- [ ] Test the entire piscine (_01_, _Alem_) |
@ -0,0 +1,44 @@
|
||||
# USB CONFIGURATION |
||||
|
||||
Requirements : |
||||
|
||||
1. 32 GB |
||||
2. interface type: 3.0 |
||||
|
||||
Follow the steps : |
||||
|
||||
> Execute the "disks" program |
||||
|
||||
![img1](img/usb-configuration/1.png) |
||||
|
||||
> Choose the usb drive to configure and press format disk |
||||
|
||||
![img2](img/usb-configuration/2.png) |
||||
|
||||
> Choose "Compatible with modern systems and hard disks > 2TB(GPT)" |
||||
|
||||
![img3](img/usb-configuration/3.png) |
||||
|
||||
![img4](img/usb-configuration/4.png) |
||||
|
||||
> Create new partition (size == all memory) |
||||
|
||||
![img5](img/usb-configuration/5.png) |
||||
|
||||
> Volume name: any |
||||
> Erase: none |
||||
> Type: other |
||||
|
||||
![img6](img/usb-configuration/6.png) |
||||
|
||||
> Choose F2FS |
||||
|
||||
![img7](img/usb-configuration/7.png) |
||||
|
||||
> Format created partition |
||||
|
||||
![img8](img/usb-configuration/8.png) |
||||
|
||||
> The new name must be 01-home |
||||
|
||||
![img9](img/usb-configuration/9.png) |
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# Run me with: |
||||
# |
||||
# bash <(curl -Ss raw.githubusercontent.com/01-edu/public/master/scripts/kickstart.sh) |
||||
|
||||
# Treat unset variables as an error when substituting. |
||||
set -u |
||||
|
||||
# Exit immediately if a command exits with a non-zero status. |
||||
set -e |
||||
|
||||
# Set the variable corresponding to the return value of a pipeline is the status |
||||
# of the last command to exit with a non-zero status, or zero if no command |
||||
# exited with a non-zero status |
||||
set -o pipefail |
||||
|
||||
# Separate tokens on newlines only |
||||
IFS=' |
||||
' |
||||
|
||||
# The value of this parameter is expanded like PS1 and the expanded value is the |
||||
# prompt printed before the command line is echoed when the -x option is set |
||||
# (see The Set Builtin). The first character of the expanded value is replicated |
||||
# multiple times, as necessary, to indicate multiple levels of indirection. |
||||
# \D{%F %T} prints date like this : 2019-12-31 23:59:59 |
||||
PS4='-\D{%F %T} ' |
||||
|
||||
# Print commands and their arguments as they are executed. |
||||
set -x |
||||
|
||||
# Skip dialogs during apt-get install commands |
||||
export DEBIAN_FRONTEND=noninteractive # DEBIAN_PRIORITY=critical |
||||
|
||||
gsettings set org.gnome.desktop.session idle-delay 0 |
||||
gsettings set org.gnome.desktop.screensaver lock-enabled false |
||||
|
||||
cd |
||||
wget github.com/01-edu/public/archive/master.zip |
||||
unzip master.zip |
||||
|
||||
cd public-master/scripts |
||||
sudo -E ./install_client.sh |
||||
cat dconfig.txt | dconf load / |
||||
|
||||
cd |
||||
rm -rf master.zip public-master |
||||
reboot |
@ -0,0 +1,9 @@
|
||||
#!/bin/bash |
||||
|
||||
# Install VSCode |
||||
|
||||
SCRIPT_DIR="$(cd -P "$(dirname "$BASH_SOURCE")" && pwd)" |
||||
cd $SCRIPT_DIR |
||||
. set.sh |
||||
|
||||
apt-get -y install libreoffice |
@ -0,0 +1,21 @@
|
||||
# d-i debconf/priority select critical |
||||
|
||||
d-i anna/choose_modules string network-console |
||||
d-i preseed/early_command string anna-install network-console |
||||
d-i network-console/authorized_keys_url string https://raw.githubusercontent.com/xpetit/.ssh/master/id_ed25519.pub |
||||
d-i network-console/password-disabled boolean true |
||||
|
||||
d-i debian-installer/locale string en_US |
||||
d-i console-keymaps-at/keymap select us |
||||
d-i keyboard-configuration/xkb-keymap select us |
||||
|
||||
d-i mirror/country string manual |
||||
d-i mirror/http/hostname string deb.debian.org |
||||
d-i mirror/http/directory string /debian |
||||
d-i mirror/http/proxy string |
||||
|
||||
#d-i netcfg/choose_interface select auto |
||||
#d-i netcfg/get_hostname string debian |
||||
#d-i netcfg/get_domain string local |
||||
|
||||
d-i hw-detect/load_firmware boolean true |
After Width: | Height: | Size: 249 KiB |
After Width: | Height: | Size: 8.6 KiB |