From 14fe26752f57e6d59b548baf4ff7e5eaefd14093 Mon Sep 17 00:00:00 2001 From: Nicolas H Date: Fri, 18 Sep 2020 23:06:12 +0200 Subject: [PATCH] =?UTF-8?q?build:=20mise=20en=20place=20de=20la=20compilat?= =?UTF-8?q?ion=20docker=20et=20de=20l'aide=20=C3=A0=20la=20compilation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Graphisme/screenshots/compilation.png | Bin 0 -> 53396 bytes README.md | 89 +++++++++++++++++++++++--- docker/alpine/build.sh | 2 + docker/alpine/dockerfile | 10 +++ docker/debian/build.sh | 2 + docker/debian/dockerfile | 9 +++ final/makefile | 6 +- make.sh | 23 +++++++ makefile | 20 +++--- menu.sh | 72 +++++++++++++++++++++ 10 files changed, 212 insertions(+), 21 deletions(-) create mode 100644 Graphisme/screenshots/compilation.png create mode 100755 docker/alpine/build.sh create mode 100644 docker/alpine/dockerfile create mode 100755 docker/debian/build.sh create mode 100644 docker/debian/dockerfile create mode 100755 make.sh create mode 100755 menu.sh diff --git a/Graphisme/screenshots/compilation.png b/Graphisme/screenshots/compilation.png new file mode 100644 index 0000000000000000000000000000000000000000..594ed212c4cdffb28fc719621672d6a76e52207e GIT binary patch literal 53396 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 “La connaissance s'acquiert par l'expérience, > tout le reste n'est que de l'information.. > > ― Albert Einstein -> ― Mathématicien, Physicien \ No newline at end of file +> ― Mathématicien, Physicien diff --git a/docker/alpine/build.sh b/docker/alpine/build.sh new file mode 100755 index 0000000..23bca2e --- /dev/null +++ b/docker/alpine/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker build . -t cos2000-compiler-alpine diff --git a/docker/alpine/dockerfile b/docker/alpine/dockerfile new file mode 100644 index 0000000..0f0aca1 --- /dev/null +++ b/docker/alpine/dockerfile @@ -0,0 +1,10 @@ +FROM alpine:3.12.0 +RUN echo "http://alpine.42.fr/v3.12/main" > /etc/apk/repositories +RUN echo "http://alpine.42.fr/v3.12/community" >> /etc/apk/repositories +RUN apk --no-cache update +RUN apk --no-cache upgrade +RUN apk --no-cache add font-noto git gcc make qemu qemu-system-i386 dosfstools qemu-system-x86_64 nasm sed gdb ovmf tar wget gzip indent binutils hexdump dos2unix xxd xz tmux git musl-dev gnome-terminal spice-gtk spice-gtk-tools python2 cramfs +RUN mkdir -p /usr/share/qemu/ +RUN ln -s /usr/share/OVMF/OVMF.fd /usr/share/qemu/OVMF.fd +RUN mkdir /data +WORKDIR /data diff --git a/docker/debian/build.sh b/docker/debian/build.sh new file mode 100755 index 0000000..1b46d05 --- /dev/null +++ b/docker/debian/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker build . -t cos2000-compiler diff --git a/docker/debian/dockerfile b/docker/debian/dockerfile new file mode 100644 index 0000000..8096ff2 --- /dev/null +++ b/docker/debian/dockerfile @@ -0,0 +1,9 @@ +FROM debian:10 + +RUN apt-get update -yq \ +&& apt-get install --no-install-recommends gcc make qemu fusefat fuseext2 gdb ovmf xz-utils psmisc tmux git libc6-dev bsdmainutils tar wget bsdmainutils indent binutils xxd bochs bochs-x bochsbios dos2unix nasm gnome-terminal spice-client-gtk python2.7 qemu-system-x86 -yq \ +&& apt-get clean -y +RUN wget http://ftp.fr.debian.org/debian/pool/main/c/cramfs/cramfsprogs_1.1-6_amd64.deb -O /tmp/cramfsprogs_1.1-6_amd64.deb +RUN dpkg -i /tmp/cramfsprogs_1.1-6_amd64.deb +RUN mkdir /data +WORKDIR /data diff --git a/final/makefile b/final/makefile index b434092..3373c2f 100755 --- a/final/makefile +++ b/final/makefile @@ -2,11 +2,11 @@ all: cos2000.img cos2000.img: (dd if=/dev/zero of=cos2000.img count=2880 bs=512) - (mkfs.msdos -F 12 -n "COS2000" cos2000.img) - (fusefat cos2000.img ./mnt -o rw+) + (mkfs.msdos -F 12 -n "COS2000" cos2000.img;mkdir ./mnt || true) + (mount cos2000.img ./mnt -o rw) (cp ../boot/loader.sys ./mnt/) (cp ../system/system.sys ./mnt/;sync) - (fusermount ./mnt -u) + (umount ./mnt) (dd if=../boot/boot12.bin of=cos2000.img seek=0 count=1 conv=notrunc;sync) clean: diff --git a/make.sh b/make.sh new file mode 100755 index 0000000..b9290e0 --- /dev/null +++ b/make.sh @@ -0,0 +1,23 @@ +#!/bin/bash +echo "Autorisation de docker à se connecter à l'écran :0" +xhost +local:docker +DOCKER=$(docker -v| grep build) +ALPINE=$(docker image ls| grep cos2000-compiler-alpine) +COMPILER=$(docker image ls| grep cos2000-compiler) +PWD=$(pwd) +if [ "${DOCKER}" == "" ]; then + echo "Docker n'est pas installé..." + echo "*** installation si sous gestionnaire de paquet debian (.deb)" + sudo apt-get install docker + exit +elif [ "${ALPINE}" != "" ]; then + echo "*** lancement de la version Alpine Linux" + docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data cos2000-compiler-alpine make $1 +elif [ "${COMPILER}" != "" ]; then + echo "*** lancement de la version Debian" + docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data cos2000-compiler make $1 +else + echo "Docker est installé mais aucune image docker n'est fonctionnelle..." + echo "*** compilation de l'image docker" + docker build ${PWD}/docker/alpine -t cos2000-compiler-alpine +fi diff --git a/makefile b/makefile index 1fc204c..a4a6469 100755 --- a/makefile +++ b/makefile @@ -3,9 +3,6 @@ all: makall makall: boot/boot12.bin lib/libs.o system/system.sys sync -install: - (sudo apt-get install nasm gcc qemu fusefat cgdb) - clean: (cd system; make clean) (cd boot; make clean) @@ -14,30 +11,35 @@ clean: sync backup: clean - (cd .. ; tar cf - cosc | gzip -f - > backup.tar.gz ; cd cosc) + (tar cf - . | gzip -f - > backup.tar.gz) copy: (cd final; make) test: all copy qemu +killer: + killall qemu-system-i386 || true + view: (hexdump -C ./final/cos2000.img|head -c10000) debug-boot: all copy qemu-debug - (sleep 2;cgdb -x ./debug/boot.txt) + (sleep 2;cgdb -x ./debug/boot.txt;spicy --uri=spice://127.0.0.1?port=5900) debug-loader: all copy qemu-debug - (sleep 2;cgdb -x ./debug/loader.txt) + (sleep 2;cgdb -x ./debug/loader.txt;spicy --uri=spice://127.0.0.1?port=5900) debug-system: all copy qemu-debug - (sleep 2;cgdb -x ./debug/system.txt) + (sleep 2;cgdb -x ./debug/system.txt;spicy --uri=spice://127.0.0.1?port=5900) qemu-debug: - (qemu-system-i386 -m 1G -fda ./final/cos2000.img -s -S &) + (qemu-system-i386 -vga qxl -spice port=5900,addr=127.0.0.1,disable-ticketing -m 1G -fda ./final/cos2000.img -s -S &) qemu: - (qemu-system-i386 -m 1G -fda ./final/cos2000.img -s) + qemu-system-i386 -vga qxl -spice port=5900,addr=127.0.0.1,disable-ticketing -m 1G -fda ./final/cos2000.img -s & + sleep 2 + spicy --uri=spice://127.0.0.1?port=5900 system/system.sys: (cd system; make) diff --git a/menu.sh b/menu.sh new file mode 100755 index 0000000..63bcbe2 --- /dev/null +++ b/menu.sh @@ -0,0 +1,72 @@ +#!/bin/bash +PWD=$(pwd) +FILE=${PWD}/README.md +if [ ! -f "$FILE" ]; then + echo "Les sources ne sont pas complets..." + echo "* Récupération des sources" + VERSION=$(git --version|grep version) + if [ "${VERSION}" == "" ]; then + echo "Git n'est pas installé, veuillez l'installer et relancer le script" + fi + git clone https://github.com/dahut87/cos2000v2.git + cd ${PWD}/cos2000v2 + git checkout master + git clean -fd + git reset --hard + rm -rf ../menu.sh +fi +while true +do +clear +echo "**********************************************************" +echo "* COS2000 - menu de compilation *" +echo "**********************************************************" +echo +echo "1 Compilation des sources" +echo "2 Emulation de COS2000" +echo "3 Débuguage de COS2000 boot en mode réel (boot)" +echo "4 Débuguage de COS2000 boot en mode réel (loader)" +echo "5 Débuguage de COS2000" +echo "6 Réalisez une sauvegarde" +echo "7 Tuer tout les processus" +echo "8 Nettoyer les sources" +echo "9 Voir le disque en hexadécimal" +echo "c Changer la version de developpement" +echo "0 Quitter" +echo "------------------------------------------" +echo "Choisissez l'action à réaliser..." +read answer +clear +case "${answer}" in +0) exit;; +1) ./make.sh all;; +2) ./make.sh test;; +3) ./make.sh debug-boot;; +4) ./make.sh debug-loader;; +5) ./make.sh debug-system;; +6) ./make.sh backup;; +7) ./make.sh killer;; +8) ./make.sh clean;; +9) ./make.sh view|more;; +c) echo "Version disponibles:" +SELECT=$(git branch|grep "*"|tr -d "* ") +NUM=1 +while read LINE +do + echo "${NUM} ${LINE}" + (( NUM++ )) +done < <(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//) +read ANSWER +CHOOSE=$(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//|tr "\n" " "|cut -d " " -f${ANSWER}) +echo "vous avez selectionné $ALL..." +git checkout $CHOOSE +git clean -fd +git reset --hard +read +;; +esac + + +done + +