From 50951cafd8b019efe30e2c5cdafdfb8c88944bc5 Mon Sep 17 00:00:00 2001 From: Armin Friedl Date: Tue, 1 Sep 2020 22:50:47 +0200 Subject: [PATCH] Prepare separate dirl distribution --- .drone.yml | 31 +++++++++++-- Dockerfile | 9 ++++ Makefile | 40 ++++------------ README.md | 25 ++++++---- config.mk | 4 +- dirl | Bin 0 -> 41584 bytes quark.1 | 131 ----------------------------------------------------- 7 files changed, 62 insertions(+), 178 deletions(-) create mode 100644 Dockerfile create mode 100755 dirl delete mode 100644 quark.1 diff --git a/.drone.yml b/.drone.yml index 174b1f6..0cf50b1 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,13 +3,20 @@ type: docker name: default steps: -- name: build +- name: glibc-x86_64 image: gcc commands: - make - - mv quark quark-dirl + - mv dirl dirl-glibc-x86_64 -- name: publish +- name: musl-x86_64 + image: alpine + commands: + - apk update && apk add make git build-base linux-headers musl-dev + - make STATIC="-static -fPIE" + - mv dirl dirl-musl-x86_64 + +- name: publish binaries image: appleboy/drone-scp settings: host: friedl.net @@ -18,5 +25,19 @@ steps: password: from_secret: deploy_password port: 22 - target: /var/services/dirlist/repo/bin/suckless/quark - source: quark-dirl + target: /var/services/dirlist/repo/bin/dirl + source: + - dirl-glibc-x86_64 + - dirl-musl-x86_64 + +- name: publish-container + image: plugins/docker + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + dockerfile: Dockerfile + purge: true + repo: arminfriedl/dirl + tags: latest diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5edcde5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM alpine + +RUN adduser web --disabled-password --no-create-home --shell /sbin/nologin && \ + addgroup web web && \ + mkdir -p /var/www/html + +COPY dirl /usr/local/bin + +ENTRYPOINT ["dirl", "-p", "80", "-u", "web", "-g", "web", "-n", "4096", "-h", "0.0.0.0", "-l", "-d", "/var/www/html"] diff --git a/Makefile b/Makefile index 7573552..f682e6a 100644 --- a/Makefile +++ b/Makefile @@ -1,45 +1,25 @@ # See LICENSE file for copyright and license details -# quark - simple web server +# dirl - customizable directory listings based on quark .POSIX: include config.mk COMPONENTS = data http sock util dirl -all: quark +all: dirl -data.o: data.c data.h util.h http.h dirl.h config.mk -dirl.o: dirl.c dirl.h util.h http.h config.mk -http.o: http.c http.h util.h http.h data.h config.h config.mk -main.o: main.c util.h sock.h http.h arg.h config.h config.mk -sock.o: sock.c sock.h util.h config.mk -util.o: util.c util.h config.mk +main.o: main.c util.h sock.h http.h arg.h config.h +http.o: http.c http.h util.h http.h data.h config.h +data.o: data.c data.h util.h http.h dirl.h +dirl.o: dirl.c dirl.h util.h http.h +sock.o: sock.c sock.h util.h +util.o: util.c util.h -quark: $(COMPONENTS:=.o) $(COMPONENTS:=.h) main.o config.mk +dirl: $(COMPONENTS:=.o) $(COMPONENTS:=.h) main.o config.mk $(CC) -o $@ $(CPPFLAGS) $(CFLAGS) $(COMPONENTS:=.o) main.o $(LDFLAGS) config.h: cp config.def.h $@ clean: - rm -f quark main.o $(COMPONENTS:=.o) - -dist: - rm -rf "quark-$(VERSION)" - mkdir -p "quark-$(VERSION)" - cp -R LICENSE Makefile arg.h config.def.h config.mk quark.1 \ - $(COMPONENTS:=.c) $(COMPONENTS:=.h) main.c "quark-$(VERSION)" - tar -cf - "quark-$(VERSION)" | gzip -c > "quark-$(VERSION).tar.gz" - rm -rf "quark-$(VERSION)" - -install: all - mkdir -p "$(DESTDIR)$(PREFIX)/bin" - cp -f quark "$(DESTDIR)$(PREFIX)/bin" - chmod 755 "$(DESTDIR)$(PREFIX)/bin/quark" - mkdir -p "$(DESTDIR)$(MANPREFIX)/man1" - cp quark.1 "$(DESTDIR)$(MANPREFIX)/man1/quark.1" - chmod 644 "$(DESTDIR)$(MANPREFIX)/man1/quark.1" - -uninstall: - rm -f "$(DESTDIR)$(PREFIX)/bin/quark" - rm -f "$(DESTDIR)$(MANPREFIX)/man1/quark.1" + rm -f dirl main.o $(COMPONENTS:=.o) diff --git a/README.md b/README.md index c2d1193..4431f36 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,20 @@ -[![Build Status](https://drone.friedl.net/api/badges/playground/suckless-quark/status.svg)](https://drone.friedl.net/playground/suckless-quark) +[![Build Status](https://drone.friedl.net/api/badges/incubator/dirl/status.svg)](https://drone.friedl.net/incubator/dirl) -This is my private tree of [quark](tools.suckless.org/quark/). Upstream can be -found at https://git.suckless.org/quark. +Dirl is a tiny server for customized directory listings. It is based on +[quark](tools.suckless.org/quark/). -Quark is a small http server. +# Getting Started +Pre-built binaries linked against glibc and musl can be downloaded from +[https://dirlist.friedl.net](https://dirlist.friedl.net/bin/dirl). -# DIRL +In addition alpine based docker images are provided at +[DockerHub](https://hub.docker.com/repository/docker/arminfriedl/dirl). -dirl is a quark extension for customized directory listings. +To start a directory listing just run the binary or start a container. -Per default dirl generates html for a directory listing like this: +# Defaults +Per default dirl generates standard compliant html for a directory listing like +this: ```html @@ -47,7 +52,7 @@ Per default dirl generates html for a directory listing like this: ``` -## Customize +# Customization The default listing can be styled by a `style.css` in the root directory. @@ -69,7 +74,7 @@ For each of these templates you can use placeholders that are replaced by their * `{modified}`: Date the entry was last modified * `{size}`: Size of the entry (if available) -### Subdirectory styling +## Subdirectory styling dirl tries to the closest template for the currently visited path. This gives you the opportunity to override templates in subdirectories. dirl walks the @@ -80,7 +85,7 @@ templates in that directory. In case no templates are found up until and including root, the default templates are used. -### Customize names +## Customize names The files defined as templates and style are ignored in the directory listing itself. In case you need to list one of these directories, or have any other diff --git a/config.mk b/config.mk index 7056241..ed33a27 100644 --- a/config.mk +++ b/config.mk @@ -1,4 +1,4 @@ -# quark version +# dirl version VERSION = 0 # Customize below to fit your system @@ -9,7 +9,7 @@ MANPREFIX = $(PREFIX)/share/man # flags CPPFLAGS = -DVERSION=\"$(VERSION)\" -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -CFLAGS = -std=c99 -pedantic -Wall -Wextra -Os +CFLAGS = -std=c99 -pedantic -Wall -Wextra -Os $(STATIC) LDFLAGS = -s # compiler and linker diff --git a/dirl b/dirl new file mode 100755 index 0000000000000000000000000000000000000000..358f8fa12a23d8de3d493a482225e499958a3956 GIT binary patch literal 41584 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 literal 0 HcmV?d00001 diff --git a/quark.1 b/quark.1 deleted file mode 100644 index 6e0e5f8..0000000 --- a/quark.1 +++ /dev/null @@ -1,131 +0,0 @@ -.Dd 2020-08-23 -.Dt QUARK 1 -.Os suckless.org -.Sh NAME -.Nm quark -.Nd simple static web server -.Sh SYNOPSIS -.Nm -.Fl p Ar port -.Op Fl h Ar host -.Op Fl u Ar user -.Op Fl g Ar group -.Op Fl n Ar num -.Op Fl d Ar dir -.Op Fl l -.Op Fl i Ar file -.Oo Fl v Ar vhost Oc ... -.Oo Fl m Ar map Oc ... -.Nm -.Fl U Ar file -.Op Fl p Ar port -.Op Fl u Ar user -.Op Fl g Ar group -.Op Fl n Ar num -.Op Fl d Ar dir -.Op Fl l -.Op Fl i Ar file -.Oo Fl v Ar vhost Oc ... -.Oo Fl m Ar map Oc ... -.Sh DESCRIPTION -.Nm -is a simple HTTP GET/HEAD-only web server for static content. -It supports virtual hosts (see -.Fl v ) , -explicit redirects (see -.Fl m ) , -directory listings (see -.Fl l ) , -conditional "If-Modified-Since"-requests (RFC 7232), range requests -(RFC 7233) and well-known URIs (RFC 8615), while refusing to serve -hidden files and directories. -.Sh OPTIONS -.Bl -tag -width Ds -.It Fl d Ar dir -Serve -.Ar dir -after chrooting into it. -The default is ".". -.It Fl g Ar group -Set group ID when dropping privileges, and in socket mode the group of the -socket file, to the ID of -.Ar group . -The default is "nogroup". -.It Fl h Ar host -Use -.Ar host -as the server hostname. -The default is the loopback interface (i.e. localhost). -.It Fl i Ar file -Set -.Ar file -as the directory index. -The default is "index.html". -.It Fl l -Enable directory listing. -.It Fl m Ar map -Add the URI prefix mapping rule specified by -.Ar map , -which has the form -.Qq Pa from to [chost] , -where each element is separated with spaces (0x20) that can be -escaped with '\\'. -.Pp -The prefix -.Pa from -of all matching URIs is replaced with -.Pa to , -optionally limited to the canonical virtual host -.Pa chost . -If no virtual hosts are given, -.Pa chost -is ignored. -.It Fl n Ar num -Set the maximum number of threads to -.Ar num . -The default is 512. -.It Fl p Ar port -In host mode, listen on port -.Ar port -for incoming connections. -In socket mode, use -.Ar port -for constructing proper virtual host -redirects on non-standard ports. -.It Fl U Ar file -Create the UNIX-domain socket -.Ar file , -listen on it for incoming connections and remove it on exit. -.It Fl u Ar user -Set user ID when dropping privileges, -and in socket mode the user of the socket file, -to the ID of -.Ar user . -The default is "nobody". -.It Fl v Ar vhost -Add the virtual host specified by -.Ar vhost , -which has the form -.Qq Pa chost regex dir [prefix] , -where each element is separated with spaces (0x20) that can be -escaped with '\\'. -.Pp -A request matching the virtual host regular expression -.Pa regex -(see -.Xr regex 3 ) -is redirected to the canonical host -.Pa chost , -if they differ, using the directory -.Pa dir -as the root directory, optionally prefixing the URI with -.Pa prefix . -If any virtual hosts are specified, all requests on non-matching -hosts are discarded. -.El -.Sh CUSTOMIZATION -.Nm -can be customized by creating a custom config.h from config.def.h and -(re)compiling the source code. This keeps it fast, secure and simple. -.Sh AUTHORS -.An Laslo Hunhold Aq Mt dev@frign.de