diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rwxr-xr-x | buildkernel.sh | 46 | ||||
-rwxr-xr-x | mkramfs.sh | 54 | ||||
-rw-r--r-- | sbin/fdmaker/fdmaker.c | 42 | ||||
-rw-r--r-- | sbin/init/init.c | 26 | ||||
-rw-r--r-- | sbin/init/sinit.c | 96 |
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"); + } +} |