> For the complete documentation index, see [llms.txt](https://paul-gleason.gitbook.io/sys-300-linux-from-scratch/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://paul-gleason.gitbook.io/sys-300-linux-from-scratch/milestones/milestone-1-chapter-1-and-2.md).

# 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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;token=d4141803-68fa-4deb-a55a-03d948032aea" alt=""><figcaption></figcaption></figure></div>
