-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update Dockerfile: ubuntu 18.04-->20.04, QEMU-5.0-->7.0
- Loading branch information
Showing
1 changed file
with
85 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,85 @@ | ||
FROM ubuntu:18.04 | ||
LABEL maintainer="dinghao188" \ | ||
version="1.1" \ | ||
description="ubuntu 18.04 with tools for tsinghua's rCore-Tutorial-V3" | ||
|
||
#install some deps | ||
RUN set -x \ | ||
&& apt-get update \ | ||
&& apt-get install -y curl wget autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ | ||
gawk build-essential bison flex texinfo gperf libtool patchutils bc xz-utils \ | ||
zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 | ||
|
||
#install rust and qemu | ||
RUN set -x; \ | ||
RUSTUP='/root/rustup.sh' \ | ||
&& cd $HOME \ | ||
#install rust | ||
&& curl https://sh.rustup.rs -sSf > $RUSTUP && chmod +x $RUSTUP \ | ||
&& $RUSTUP -y --default-toolchain nightly --profile minimal \ | ||
|
||
#compile qemu | ||
&& wget https://ftp.osuosl.org/pub/blfs/conglomeration/qemu/qemu-5.0.0.tar.xz \ | ||
&& tar xvJf qemu-5.0.0.tar.xz \ | ||
&& cd qemu-5.0.0 \ | ||
&& ./configure --target-list=riscv64-softmmu,riscv64-linux-user \ | ||
&& make -j$(nproc) install \ | ||
&& cd $HOME && rm -rf qemu-5.0.0 qemu-5.0.0.tar.xz | ||
|
||
#for chinese network | ||
RUN set -x; \ | ||
APT_CONF='/etc/apt/sources.list'; \ | ||
CARGO_CONF='/root/.cargo/config'; \ | ||
BASHRC='/root/.bashrc' \ | ||
&& echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static' >> $BASHRC \ | ||
&& echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup' >> $BASHRC \ | ||
&& touch $CARGO_CONF \ | ||
&& echo '[source.crates-io]' > $CARGO_CONF \ | ||
&& echo "replace-with = 'ustc'" >> $CARGO_CONF \ | ||
&& echo '[source.ustc]' >> $CARGO_CONF \ | ||
&& echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> $CARGO_CONF | ||
# syntax=docker/dockerfile:1 | ||
# This Dockerfile is adapted from https://github.com/LearningOS/rCore-Tutorial-v3/blob/main/Dockerfile | ||
# with the following major updates: | ||
# - ubuntu 18.04 -> 20.04 | ||
# - qemu 5.0.0 -> 7.0.0 | ||
# - Extensive comments linking to relevant documentation | ||
FROM ubuntu:20.04 | ||
|
||
ARG QEMU_VERSION=7.0.0 | ||
ARG HOME=/root | ||
|
||
# 0. Install general tools | ||
ARG DEBIAN_FRONTEND=noninteractive | ||
RUN apt-get update && \ | ||
apt-get install -y \ | ||
curl \ | ||
git \ | ||
python3 \ | ||
wget | ||
|
||
# 1. Set up QEMU RISC-V | ||
# - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu | ||
# - https://www.qemu.org/download/ | ||
# - https://wiki.qemu.org/Documentation/Platforms/RISCV | ||
# - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html | ||
|
||
# 1.1. Download source | ||
WORKDIR ${HOME} | ||
RUN wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \ | ||
tar xvJf qemu-${QEMU_VERSION}.tar.xz | ||
|
||
# 1.2. Install dependencies | ||
# - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html#prerequisites | ||
RUN apt-get install -y \ | ||
autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ | ||
gawk build-essential bison flex texinfo gperf libtool patchutils bc \ | ||
zlib1g-dev libexpat-dev git \ | ||
ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev | ||
|
||
# 1.3. Build and install from source | ||
WORKDIR ${HOME}/qemu-${QEMU_VERSION} | ||
RUN ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \ | ||
make -j$(nproc) && \ | ||
make install | ||
|
||
# 1.4. Clean up | ||
WORKDIR ${HOME} | ||
RUN rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz | ||
|
||
# 1.5. Sanity checking | ||
RUN qemu-system-riscv64 --version && \ | ||
qemu-riscv64 --version | ||
|
||
# 2. Set up Rust | ||
# - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu | ||
# - https://www.rust-lang.org/tools/install | ||
# - https://github.com/rust-lang/docker-rust/blob/master/Dockerfile-debian.template | ||
|
||
# 2.1. Install | ||
ENV RUSTUP_HOME=/usr/local/rustup \ | ||
CARGO_HOME=/usr/local/cargo \ | ||
PATH=/usr/local/cargo/bin:$PATH \ | ||
RUST_VERSION=nightly | ||
RUN set -eux; \ | ||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init; \ | ||
chmod +x rustup-init; \ | ||
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION; \ | ||
rm rustup-init; \ | ||
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; | ||
|
||
# 2.2. Sanity checking | ||
RUN rustup --version && \ | ||
cargo --version && \ | ||
rustc --version | ||
|
||
# 3. Build env for labs | ||
# See os1/Makefile `env:` for example. | ||
# This avoids having to wait for these steps each time using a new container. | ||
RUN rustup target add riscv64gc-unknown-none-elf && \ | ||
cargo install cargo-binutils --vers ~0.2 && \ | ||
rustup component add rust-src && \ | ||
rustup component add llvm-tools-preview | ||
|
||
# Ready to go | ||
WORKDIR ${HOME} |