# Milestone 1 (Chapter 1 & 2)

### Mothership

#### Specs

OS: [Xubuntu 20.04.5 amd 64](http://mirror.us.leaseweb.net/ubuntu-cdimage/xubuntu/releases/20.04/release/xubuntu-20.04.5-desktop-amd64.iso)\
Memory: 8GB\
vCPU: 4threads\
Storage: 1x40GB & 1x30GB SCSI disk\
&#x20;   \- Second disk is called `mothership-0.vmdk`\
&#x20;Boot: BIOS

![](https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2FznHD4ycE2ed9MeudNz9I%2Fimage.png?alt=media\&token=0d5a92f2-19e5-42ba-9a7f-7861c0dba146)

### Startup Commands

```
sudo apt install ssh
mkdir ./lfs
sudo mkdir /mnt/lfs
```

### Version Check

```
sudo apt install build-essential
sudo apt dist-upgrade
```

```
cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc --version | head -n1`
else
echo "yacc not found"
fi
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
echo awk is `/usr/bin/awk --version | head -n1`
else
echo "awk not found"
fi
gcc --version | head -n1
g++ --version | head -n1
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1 # texinfo version
xz --version | head -n1
echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF
```

Make executable and run

```
sudo chmod +x ./version-check.sh
bash version-check.sh
```

Output from the first `./version-check.sh` pass

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2FkGqJqoCfo45sUEc6dHrB%2Fimage.png?alt=media&#x26;token=aa841301-9840-4b50-83fe-7358c4751a8c" alt=""><figcaption></figcaption></figure></div>

**FIX:**&#x20;

```
sudo apt install bison binutils gawk texinfo
sudo ln -sf bash /bin/sh
```

Output after installing all dependencies

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2FGCtiyxvuYCBQRlN9KLJC%2Fimage.png?alt=media&#x26;token=6e3fa8ea-083c-488e-8571-46c4bf5c1337" alt=""><figcaption><p>Clean version-check.sh</p></figcaption></figure></div>

### Partitioning Scheme

/dev/sdb needs to be partitioned

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2FHE7D2Ojko7ebTR0rTkDN%2Fimage.png?alt=media&#x26;token=ef7cedb9-4bab-47a1-8f87-24137859ec17" alt=""><figcaption><p>lsblk output</p></figcaption></figure></div>

#### Setup Partitions

```
sudo -i
cfdisk /dev/sdb
```

<figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2F8W0pu83f5qV7S42jhRru%2Fimage.png?alt=media&#x26;token=b54d841e-f08b-4d56-980d-40debf26ed84" alt=""><figcaption><p>cfdisk output</p></figcaption></figure>

Now select `Write` and type `yes`

`lsblk` after cfdisk

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2FrQloLiGBVl88Ov7qwDuW%2Fimage.png?alt=media&#x26;token=4b1b95f6-5c5e-4007-acca-1515dd2e8805" alt=""><figcaption></figcaption></figure></div>

```
mkfs.ext2 /dev/sdb2 -L LFSBOOT
mkfs.ext4 /dev/sdb3 -L LFSROOT
mkfs.ext4 /dev/sdb4 -L LFSHOME
mkswap /dev/sdb5
```

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2FVY8dH8XUu4QnWUpD4TL2%2Fimage.png?alt=media&#x26;token=0146b315-6142-4afa-a102-bd5dd4153684" alt=""><figcaption><p>Command Outputs</p></figcaption></figure></div>

```
lsblk -f /dev/sdb
```

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2F9cs52zBui05PNcf0D40D%2Fimage.png?alt=media&#x26;token=7338490f-141e-48d9-b0cc-f41176cd0d97" alt=""><figcaption><p>/dev/sdb partitioned</p></figcaption></figure></div>

### Setting $LFS (2.6)

As normal user

```
exit
echo "export LFS=/mnt/lfs" >> ~/.bashrc
source ~/.bashrc
echo $LFS
```

As root user

```
sudo -i
echo "export LFS=/mnt/lfs" >> ~/.bashrc
source ~/.bashrc
echo $LFS
```

### Mounting LFS manually (2.7)

<pre><code>sudo -i
mkdir -pv $LFS
mount -c -t ext4 /dev/sdb3 $LFS
mkdir -v $LFS/home
mount -c -t ext4 /dev/sdb4 $LFS/home
<strong>swapon /dev/sdb5
</strong></code></pre>

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2F5G27AkLynA3GPfwhw0vY%2Fimage.png?alt=media&#x26;token=696adc09-44cc-418f-a65f-26cc59e4106f" alt=""><figcaption></figcaption></figure></div>

### Mount on Boot

```
nano /etc/fstab
```

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2F56TO5VMwcWLPYvx7L3X6%2Fimage.png?alt=media&#x26;token=88971947-ac07-4143-8d91-d8dfdb3b76c9" alt=""><figcaption></figcaption></figure></div>

```
reboot
lsblk
```

<div align="left"><figure><img src="https://3247611178-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZz3gnaYbTd4P6zvkQkn%2Fuploads%2Ftp3WAnbgi950A5U8sNux%2Fimage.png?alt=media&#x26;token=d4141803-68fa-4deb-a55a-03d948032aea" alt=""><figcaption></figcaption></figure></div>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://paul-gleason.gitbook.io/sys-300-linux-from-scratch/milestones/milestone-1-chapter-1-and-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
