diff --git a/Dockerfile b/Dockerfile index 99c065c..9747179 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM ubuntu:22.04 as src -RUN useradd --create-home --home-dir /vagrant --user-group vagrant +RUN useradd --create-home --home-dir /home/vagrant --user-group vagrant RUN echo vagrant:vagrant | chpasswd RUN echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers RUN apt -y update && apt -y install puppet diff --git a/Dockerfile.workspace b/Dockerfile.workspace index 132ebd7..541cf85 100644 --- a/Dockerfile.workspace +++ b/Dockerfile.workspace @@ -21,6 +21,8 @@ RUN echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/hom FROM ubuntu:22.04 +RUN yes | unminimize + COPY --from=puppet . . RUN usermod -d /home/vagrant vagrant diff --git a/entrypoint.sh b/entrypoint.sh index a96068e..268d50b 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -6,6 +6,7 @@ src=/vagrant if [ -z "$(ls -A $home)" ]; then sudo cp -R $src/. $home sudo chown -R vagrant $home + sudo chmod -R 0700 ~/ fi sudo service ssh start diff --git a/manifests/site.pp b/manifests/site.pp index 724df36..a5c92ee 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -79,6 +79,9 @@ "fzf", "openssh-server", "man", + "file", + "gcc-i686-linux-gnu", + "qemu-user", ]: ensure => installed; [ @@ -126,7 +129,7 @@ } -> # Set up some project support stuff - class { ["cs162::bochs", "cs162::golang", "cs162::shell", "cs162::rustlang", "cs162::i386_gcc"]: + class { ["cs162::bochs", "cs162::golang", "cs162::shell", "cs162::rustlang"]: home_directory => $home, owner => vagrant, group => vagrant, diff --git a/modules/cs162/files/shell/bin/backtrace b/modules/cs162/files/shell/bin/backtrace index 1151f30..4d61f5c 100755 --- a/modules/cs162/files/shell/bin/backtrace +++ b/modules/cs162/files/shell/bin/backtrace @@ -48,7 +48,7 @@ if (!@binaries) { } # Find addr2line. -my ($a2l) = search_path ("i386-elf-addr2line") || search_path ("addr2line"); +my ($a2l) = search_path ("i386-elf-addr2line") || search_path ("i686-linux-gnu-addr2line") || search_path ("addr2line"); if (!$a2l) { die "backtrace: neither `i386-elf-addr2line' nor `addr2line' in PATH\n"; } diff --git a/modules/cs162/files/shell/bin/i386-cgdb b/modules/cs162/files/shell/bin/i386-cgdb new file mode 100755 index 0000000..115833f --- /dev/null +++ b/modules/cs162/files/shell/bin/i386-cgdb @@ -0,0 +1,4 @@ +#!/usr/bin/bash + +i386-exec -g 16200 "$1" &\ +cgdb -d gdb-multiarch -ex "file $1" -ex "target remote localhost:16200" \ No newline at end of file diff --git a/modules/cs162/files/shell/bin/i386-exec b/modules/cs162/files/shell/bin/i386-exec new file mode 100755 index 0000000..edda5c1 --- /dev/null +++ b/modules/cs162/files/shell/bin/i386-exec @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +qemu-i386 -L /usr/i686-linux-gnu "$@" \ No newline at end of file diff --git a/modules/cs162/files/shell/bin/i386-gcc b/modules/cs162/files/shell/bin/i386-gcc new file mode 100755 index 0000000..993c3bb --- /dev/null +++ b/modules/cs162/files/shell/bin/i386-gcc @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +i686-linux-gnu-gcc -m32 "$@" \ No newline at end of file diff --git a/modules/cs162/files/shell/bin/i386-gdb b/modules/cs162/files/shell/bin/i386-gdb new file mode 100755 index 0000000..675e2d0 --- /dev/null +++ b/modules/cs162/files/shell/bin/i386-gdb @@ -0,0 +1,4 @@ +#!/usr/bin/bash + +i386-exec -g 16200 "$1" &\ +gdb-multiarch -ex "file $1" -ex "target remote localhost:16200" \ No newline at end of file diff --git a/modules/cs162/files/shell/bin/i386-objdump b/modules/cs162/files/shell/bin/i386-objdump new file mode 100755 index 0000000..5c6e4f7 --- /dev/null +++ b/modules/cs162/files/shell/bin/i386-objdump @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +i686-linux-gnu-objdump -mi386 "$@" \ No newline at end of file diff --git a/modules/cs162/manifests/i386_gcc.pp b/modules/cs162/manifests/i386_gcc.pp deleted file mode 100644 index aacf1d5..0000000 --- a/modules/cs162/manifests/i386_gcc.pp +++ /dev/null @@ -1,23 +0,0 @@ -class cs162::i386_gcc($home_directory, $owner, $group) { - - $install_script = "$home_directory/.i386-gcc.install.sh" - - Package<| |> - -> - file { $install_script: - ensure => present, - owner => $owner, - group => $group, - mode => "0755", - content => template("cs162/i386-gcc/install.sh"), - } - -> - exec { "install i386 GCC from source": - cwd => $home_directory, - user => $owner, - command => $install_script, - creates => "/usr/local/i386elfgcc", - timeout => 0, - } - -} diff --git a/modules/cs162/templates/i386-gcc/install.sh b/modules/cs162/templates/i386-gcc/install.sh deleted file mode 100755 index 4c524c2..0000000 --- a/modules/cs162/templates/i386-gcc/install.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -mkdir /i386 - -cd /i386 - -export CC=/bin/gcc -export LD=/bin/gcc -export PREFIX="/usr/local/i386elfgcc" -export TARGET=i386-elf -export PATH="$PREFIX/bin:$PATH" -curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.gz -tar -xf binutils-2.40.tar.gz -mkdir binutils-build -cd binutils-build -../binutils-2.40/configure --target=$TARGET --enable-interwork --enable-multilib --disable-nls --disable-werror --prefix=$PREFIX 2>&1 | tee configure.log -sudo make all install 2>&1 | tee make.log - -# Building gcc for i386 -cd /i386 -wget https://ftp.gnu.org/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.gz -tar xzf gcc-11.3.0.tar.gz -cd gcc-11.3.0 -./contrib/download_prerequisites -cd .. -mkdir objdir -cd objdir -../gcc-11.3.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --disable-libssp --enable-languages=c --without-headers -make all-gcc -make all-target-libgcc -sudo make install-gcc -sudo make install-target-libgcc diff --git a/modules/cs162/templates/shell/bashrc b/modules/cs162/templates/shell/bashrc index c1602b2..345b56e 100644 --- a/modules/cs162/templates/shell/bashrc +++ b/modules/cs162/templates/shell/bashrc @@ -131,15 +131,6 @@ if ! shopt -oq posix; then fi fi -if [[ $(uname -m) =~ ^arm|^aarch ]]; then - export CC=/bin/gcc - export LD=/bin/gcc - export PREFIX="/usr/local/i386elfgcc" - export TARGET=i386-elf - export PATH="$PREFIX/bin:/home/vagrant/binutils-build/binutils:$PATH" -fi - . ~/.cs162.bashrc [ -f ~/.fzf.bash ] && source ~/.fzf.bash -cd ~