summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rwxr-xr-xbuildkernel.sh46
-rwxr-xr-xmkramfs.sh54
-rw-r--r--sbin/fdmaker/fdmaker.c42
-rw-r--r--sbin/init/init.c26
-rw-r--r--sbin/init/sinit.c96
6 files changed, 215 insertions, 51 deletions
diff --git a/.gitignore b/.gitignore
index 92d58f9..9cc1f02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-init
+initramfs
 iso
 kernel
 build
diff --git a/buildkernel.sh b/buildkernel.sh
index bdda365..aec236e 100755
--- a/buildkernel.sh
+++ b/buildkernel.sh
@@ -1,4 +1,4 @@
-rm -r init/*
+rm -r initramfs/*
 cp /usr/bin/zsh build
 # cp /usr/bin/vi build
 # cp /usr/lib/iwd/iwd sbuild
@@ -12,29 +12,29 @@ cp ../tty-tetris-v2/tty-tetris build/bin/tetris
 # rm lib/*
 # rm lib64/*
 ./mkramfs.sh
-cp /usr/lib/libreadline.so.8       init/lib
-cp /usr/lib/libcap.so.2            init/lib
-cp /usr/lib/libc.so.6              init/lib
-cp /usr/lib/libbpf.so.1            init/lib
-cp /usr/lib/libelf.so.1            init/lib
-cp /usr/lib/libmnl.so.0            init/lib
-# cp /usr/lib/libell.so.0          init/lib
-# cp /usr/lib/libgcc_s.so.1        init/lib
-cp /usr/lib/libcrypto.so.3         init/lib
-cp /usr/lib/libncursesw.so.6       init/lib
-cp /usr/lib/libcap.so.2            init/lib
-cp /usr/lib/libidn2.so.0           init/lib
-cp /usr/lib/libunistring.so.5      init/lib
-cp /usr/lib64/ld-linux-x86-64.so.2 init/lib64
-cp /usr/lib/libm.so.6              init/lib
-# cp /usr/lib/libc.so.6            init/lib
-cp /usr/lib/libmagic.so.1          init/lib
-cp /usr/lib/libzstd.so.1           init/lib
-cp /usr/lib/liblzma.so.5           init/lib
-cp /usr/lib/libbz2.so.1.0          init/lib
-cp /usr/lib/libz.so.1              init/lib
+cp /usr/lib/libreadline.so.8       initramfs/lib
+cp /usr/lib/libcap.so.2            initramfs/lib
+cp /usr/lib/libc.so.6              initramfs/lib
+cp /usr/lib/libbpf.so.1            initramfs/lib
+cp /usr/lib/libelf.so.1            initramfs/lib
+cp /usr/lib/libmnl.so.0            initramfs/lib
+# cp /usr/lib/libell.so.0          initramfs/lib
+# cp /usr/lib/libgcc_s.so.1        initramfs/lib
+cp /usr/lib/libcrypto.so.3         initramfs/lib
+cp /usr/lib/libncursesw.so.6       initramfs/lib
+cp /usr/lib/libcap.so.2            initramfs/lib
+cp /usr/lib/libidn2.so.0           initramfs/lib
+cp /usr/lib/libunistring.so.5      initramfs/lib
+cp /usr/lib64/ld-linux-x86-64.so.2 initramfs/lib64
+cp /usr/lib/libm.so.6              initramfs/lib
+# cp /usr/lib/libc.so.6            initramfs/lib
+cp /usr/lib/libmagic.so.1          initramfs/lib
+cp /usr/lib/libzstd.so.1           initramfs/lib
+cp /usr/lib/liblzma.so.5           initramfs/lib
+cp /usr/lib/libbz2.so.1.0          initramfs/lib
+cp /usr/lib/libz.so.1              initramfs/lib
 INITPATH=$PWD/init.cpio
-cd init
+cd initramfs
 find . | cpio -o -H newc > ../init.cpio
 cd ../kernel
 make -j4
diff --git a/mkramfs.sh b/mkramfs.sh
index e108dbe..50392f0 100755
--- a/mkramfs.sh
+++ b/mkramfs.sh
@@ -1,32 +1,32 @@
 mkdir init
 
-mkdir init/bin
-mkdir init/sbin
-mkdir init/lib
-mkdir init/lib64
-mkdir init/usr
-mkdir init/var
-mkdir init/var/tmp
-mkdir init/var/lib
-mkdir init/run
-mkdir init/run/dhcpcd
-touch init/run/dhcpcd/pid
-mkdir init/etc
-mkdir init/etc/smolsh
-touch init/etc/smolsh/smolsh.termcap
+mkdir initramfs/bin
+mkdir initramfs/sbin
+mkdir initramfs/lib
+mkdir initramfs/lib64
+mkdir initramfs/usr
+mkdir initramfs/var
+mkdir initramfs/var/tmp
+mkdir initramfs/var/lib
+mkdir initramfs/run
+mkdir initramfs/run/dhcpcd
+touch initramfs/run/dhcpcd/pid
+mkdir initramfs/etc
+mkdir initramfs/etc/smolsh
+touch initramfs/etc/smolsh/smolsh.termcap
 echo 'xterm-kitty|KovIdTTY:5i:NP:am:cc:hs:km:mi:ms:xn:Co#256:co#80:it#8:li#24:pa#32767:#2=\E[1;2H:#3=\E[2;2~:#4=\E[1;2D:%1=:%c=\E[6;2~:%e=\E[5;2~:%i=\E[1;2C:&8=:&9=\E[1;2E:*4=\E[3;2~:*7=\E[1;2F:@1=\EOE:@7=\EOF:AB=\E[48;5;%dm:AF=\E[38;5;%dm:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:F1=\E[23~:F2=\E[24~:F3=\E[1;2P:F4=\E[1;2Q:F5=\E[13;2~:F6=\E[1;2S:F7=\E[15;2~:F8=\E[17;2~:F9=\E[18;2~:FA=\E[19;2~:FB=\E[20;2~:FC=\E[21;2~:FD=\E[23;2~:FE=\E[24;2~:FF=\E[1;5P:FG=\E[1;5Q:FH=\E[13;5~:FI=\E[1;5S:FJ=\E[15;5~:FK=\E[17;5~:FL=\E[18;5~:FM=\E[19;5~:FN=\E[20;5~:FO=\E[21;5~:FP=\E[23;5~:FQ=\E[24;5~:FR=\E[1;6P:FS=\E[1;6Q:FT=\E[13;6~:FU=\E[1;6S:FV=\E[15;6~:FW=\E[17;6~:FX=\E[18;6~:FY=\E[19;6~:FZ=\E[20;6~:Fa=\E[21;6~:Fb=\E[23;6~:Fc=\E[24;6~:Fd=\E[1;3P:Fe=\E[1;3Q:Ff=\E[13;3~:Fg=\E[1;3S:Fh=\E[15;3~:Fi=\E[17;3~:Fj=\E[18;3~:Fk=\E[19;3~:Fl=\E[20;3~:Fm=\E[21;3~:Fn=\E[23;3~:Fo=\E[24;3~:Fp=\E[1;4P:Fq=\E[1;4Q:Fr=\E[13;4~:IC=\E[%d@:..Ic=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\:K1=:K3=:K4=:K5=:Km=\E[M:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:ZH=\E[3m:ZR=\E[23m:ac=++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cb=\E[1K:cd=\E[J:ce=\E[K:ch=\E[%i%dG:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=\r:cs=\E[%i%d;%dr:ct=\E[3g:cv=\E[%i%dd:dc=\E[P:dl=\E[M:do=\n:ds=\E]2;\E\\:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kB=\E[Z:kD=\E[3~:kF=\E[1;2B:kI=\E[2~:kN=\E[6~:kP=\E[5~:kR=\E[1;2A:kb=\177:kd=\EOB:ke=\E[?1l:kh=\EOH:kl=\EOD:kr=\EOC:ks=\E[?1h:ku=\EOA:le=^H:md=\E[1m:me=\E[0m:mh=\E[2m:mr=\E[7m:nd=\E[C:oc=\E]104\007:op=\E[39;49m:r1=\E]\E\\\Ec:rc=\E8:..rp=%p1%c\E[%p2%{1}%-%db:..sa=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:te=\E[?1049l:ti=\E[?1049h:ts=\E]2;:u6=\E[%i%d;%dR:u7=\E[6n:..u8=\E[?%[;0123456789]c:u9=\E[c:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:ve=\E[?12h\E[?25h:vi=\E[?25l:vs=\E[?12;25h:%' \
- > init/etc/smolsh/smolsh.termcap
-mkdir -p init/usr/share/terminfo/x
-cat /usr/share/terminfo/x/xterm-256color > init/usr/share/terminfo/x/xterm-256color
-echo "root:x:0:0::/root:/bin/shel" > init/etc/passwd
-cat /etc/dhcpcd.conf > init/etc/dhcpcd.conf
-mkdir init/root
-cp zshrc init/root/.zshrc
+ > initramfs/etc/smolsh/smolsh.termcap
+mkdir -p initramfs/usr/share/terminfo/x
+cat /usr/share/terminfo/x/xterm-256color > initramfs/usr/share/terminfo/x/xterm-256color
+echo "root:x:0:0::/root:/bin/shel" > initramfs/etc/passwd
+cat /etc/dhcpcd.conf > initramfs/etc/dhcpcd.conf
+mkdir initramfs/root
+cp zshrc initramfs/root/.zshrc
 
-cp -rf build/* init/
-# cp sbuild/* init/sbin
-# cp lib/* init/lib
-# cp lib64/* init/lib64
+cp -rf build/* initramfs/
+# cp sbuild/* initramfs/sbin
+# cp lib/* initramfs/lib
+# cp lib64/* initramfs/lib64
 
-# cp -r lib init/usr/
-# cp -r lib64 init/usr/
\ No newline at end of file
+# cp -r lib initramfs/usr/
+# cp -r lib64 initramfs/usr/
\ No newline at end of file
diff --git a/sbin/fdmaker/fdmaker.c b/sbin/fdmaker/fdmaker.c
new file mode 100644
index 0000000..c504181
--- /dev/null
+++ b/sbin/fdmaker/fdmaker.c
@@ -0,0 +1,42 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/sysmacros.h>
+#include <string.h>
+
+int main() {
+    // make process be sigma (why did i think of this)
+    if (setsid() < 0) {
+        perror("setsid");
+        exit(1);
+    }
+
+    // >open /dev/tty1
+    // >look inside
+    // >Failed to open /dev/tty1
+    int fd = open("/dev/tty1", O_RDWR);
+    if (fd == -1) {
+        write(2, "Failed to open /dev/tty1\n", 26);
+        exit(1);
+    }
+    // make tty1 be the displayed tty
+    if (ioctl(fd, TIOCSCTTY, 0) < 0) {
+        write(2, "ioctl TIOCSCTTY", 16);
+        exit(1);
+    }
+    char path[128] = {0};
+    write(fd, "\nEnter path to shell (nothing for /bin/shel): ", 47);
+    int len = read(0, path, sizeof(path));
+    path[len - 1] = '\0';
+    if (len == 1) {
+        strcpy(path, "/bin/shel");
+    }
+    // write(1, path, strlen(path));
+    write(fd, "\e[2J\e[0;0Hwelcome to nyaOS - a distro made by an idiot with no C experience that still somehow works\n\n", 103);
+    
+    execve(path, 0, 0);
+}
\ No newline at end of file
diff --git a/sbin/init/init.c b/sbin/init/init.c
new file mode 100644
index 0000000..168d011
--- /dev/null
+++ b/sbin/init/init.c
@@ -0,0 +1,26 @@
+#include <unistd.h>
+#include <signal.h>
+
+int main() {
+	sigset_t set;
+	int status;
+    write(1, "nyaOS init process started\n", 28);
+	sigfillset(&set);
+	sigprocmask(SIG_BLOCK, &set, 0);
+    if (fork()) pause();
+    //TODO - eventually add device scan
+    if (!fork()) execve("/sbin/devscan", 0, 0);
+
+    sigprocmask(SIG_UNBLOCK, &set, 0);
+
+    // setsid();
+    setpgid(0, 0);
+    
+    write(1, "press RETURN to\n\n", 17);
+    char a[2] = {0};
+    read(0, a, 1);
+    // make tty1
+    execve("/sbin/fdmaker", 0, 0);
+    // execve("/sbin/devscan", 0, 0);
+    // execve("/sbin/fdmaker", 0, 0);
+}
\ No newline at end of file
diff --git a/sbin/init/sinit.c b/sbin/init/sinit.c
new file mode 100644
index 0000000..b29f880
--- /dev/null
+++ b/sbin/init/sinit.c
@@ -0,0 +1,96 @@
+/* See LICENSE file for copyright and license details. */
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define LEN(x)	(sizeof (x) / sizeof *(x))
+#define TIMEO	30
+
+static void sigpoweroff(void);
+static void sigreap(void);
+static void sigreboot(void);
+static void spawn(char *const []);
+
+static struct {
+	int sig;
+	void (*handler)(void);
+} sigmap[] = {
+	{ SIGUSR1, sigpoweroff },
+	{ SIGCHLD, sigreap     },
+	{ SIGALRM, sigreap     },
+	{ SIGINT,  sigreboot   },
+};
+
+/* See LICENSE file for copyright and license details. */
+
+static char *const rcinitcmd[]     = { "/bin/zsh", NULL };
+static char *const rcrebootcmd[]   = { "/bin/rc.shutdown", "reboot", NULL };
+static char *const rcpoweroffcmd[] = { "/bin/rc.shutdown", "poweroff", NULL };
+
+
+static sigset_t set;
+
+int
+main(void)
+{
+	int sig;
+	size_t i;
+
+	if (getpid() != 1)
+		return 1;
+	chdir("/");
+	sigfillset(&set);
+	sigprocmask(SIG_BLOCK, &set, NULL);
+	spawn(rcinitcmd);
+	while (1) {
+		alarm(TIMEO);
+		sigwait(&set, &sig);
+		for (i = 0; i < LEN(sigmap); i++) {
+			if (sigmap[i].sig == sig) {
+				sigmap[i].handler();
+				break;
+			}
+		}
+	}
+	/* not reachable */
+	return 0;
+}
+
+static void
+sigpoweroff(void)
+{
+	spawn(rcpoweroffcmd);
+}
+
+static void
+sigreap(void)
+{
+	while (waitpid(-1, NULL, WNOHANG) > 0)
+		;
+	alarm(TIMEO);
+}
+
+static void
+sigreboot(void)
+{
+	spawn(rcrebootcmd);
+}
+
+static void
+spawn(char *const argv[])
+{
+	switch (fork()) {
+	case 0:
+		sigprocmask(SIG_UNBLOCK, &set, NULL);
+		setsid();
+		execvp(argv[0], argv);
+		perror("execvp");
+		_exit(1);
+	case -1:
+		perror("fork");
+	}
+}