2021-06-15-Install-thttpd-Pi-400-ubuntu-21.04-desktop-arm64+raspi.txt

	Once the Acme.com thttpd pages have been copied, most of the commands can be copied and pasted to a terminal. A few things will need to be changed but most will be: copy, paste, enter. WWW pages for EVERYONE!!!

*************

	How much HTML do I have to know to set up a web page? NONE!
	The thttpd web server, without any HTML, can make a quick and dirty website which looks like a directory listing. The priority is FUNCTION and GLITZ can come later!
	If you get banned by Google, Facebook, YouTube or whoever, you can be back live in minutes! When a file is put into "public_html" it is live!
	These instructions may seem long with a lot of unnecessary text, but I want even a third or fourth grader who has never compiled a program to be able to go through the process without any trouble. If they do have trouble, with enough documentation to be able to see where they went wrong and be able to correct the problem.
	This project should be the beginning for a live stable website directly connected to the Internet, whether connected dynamically or statically, and as a basis for website design.
	The initial file for a web page is "index.html" although thttpd will recognize INDEX_NAMES: "index.html", "index.htm", "index.xhtml", "index.xht", "Default.htm", and "index.cgi", for initial web page file names. If no index file is found, thttpd will automatically generate its own index which results in a green screen and a directory listing.

	For starters, one should probably choose a microSD card that has a U3 rating (100MB/s Read speed, and 50MB/s Write speed) over a U1 card (100 MB/s Read speed, and 10 MB/s Write speed). I have been using WalMart "keep onn" cards which work OK. One 128GB microSDXC U3 Card with Adapter runs $17.94, One 64GB microSDXC U3 Card with adapter runs $11.24, while two 32GB microSDHC U1 Cards with Adapter runs $11.94. At present, my website, http://162.250.19.7/ is running on a Raspberry Pi 4B with 4GB RAM and a 32GB U1 card using 32 bit Raspian which runs OK. My biggest problem is losing power since I live out in my field and have to run batteries and an inverter for my power. If my voltage goes too high it drops out and if it goes too low it drops out. My internet connection is from https://RiverCanyonWireless.com/ and is $30 a month with an extra $5 for a static IP Address, with a download speed of 2Mbits/sec and an upload speed of 1Mbits/sec. thttpd will serve files up to 2GB and if they are over that they just don't show up. Downloading "Ubuntu 21.04 Desktop 64bit" at 1.6GB took 2 hours. A 2GB file uploading would take up all of my bandwidth for at least 5 hours! Smaller files work a lot better! thttpd is a bullet proof World Wide Web HTTP server which used to be the number seven most popular web server. One can safely post things for the "World to See" since out of the box thttpd has a read only file structure. My site has been up for almost 2 years with no problems, and I had no problems when I ran an earlier version back in 2005. Some of my earlier sites are under "www/" and are not that great, but making a website with HTML is a learning process. As one can see from my site, the idea is to share information with someone across the world, (Function) and worry about the (Glitz) that can come with experience. If one would like to see what kind of hammering a www site gets they can look at my log files under "ac0xl/" and then "logs/" which I have been posting manually. Using "whois"  and typing in their IP Address, (sudo apt install whois), one can get an idea of where someone was coming from when they looked at your site. I really liked the use of an anvil for an icon since it denotes the ability to be hammered on without breaking!

	If one is going to use a microSD card that is larger than 32GB one HAS to erase it first with rpi-imager (To install on Raspberry Pi OS, type: "sudo apt install rpi-imager", in a Terminal window.) The message I got back was: No apt package "rpi-imager", but there is a snap with that name. Try "snap install rpi-imager" which did actually work! Under Operating System, choose "ERASE, Format card as FAT32", since the loader will only handle a FAT32 file system, and then after it loads it will replace all of that with a FAT32 boot partition and a regular 83 linux ext4 rootfs partition.

	The next step is to copy the 64 bit Ubuntu Desktop OS onto the microSD card. It really helps to have a USB card reader dongle to be able to write to SD and microSD cards! After the card is written it is time to shut down and power off, then install the new microSD card into the Pi 400 and repower it. The setup process will take a little time, and then ask some questions to get the system up and running. After it finishes with the setup, go into the Firefox Web Browser and at the top click on the 3 bars at the top right (Open Application Menu). Under Preferences, Files and Applications, click on "Always ask you where to save files" as we will be saving files to several different places. It would probably be a good idea to also go through all of the different settings and get them the way you want. Another place to check to get things to where one can see them is the top right hand corner where the power and internet connections show and click on it, then click on "Settings." Under Accessibility, I turned on "Large Text" and on the Cursor Size I went with "Larger" so I could see where the mouse pointer was. The question on a new system is always, "Where did they hide this function?" At this point I think we are ready to start getting "thttpd" from http://Acme.com/ and the documentation loaded.

32GB-Ubuntu-64-Desktop.txt

frank@frank-desktop:~$ w
 21:47:38 up 35 min,  1 user,  load average: 0.05, 0.32, 0.41
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
frank    tty2     tty2             21:11   52days  0.18s  0.16s /usr/libexec/gnome-session-binary --systemd --session=ubuntu
frank@frank-desktop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           374M  4.5M  370M   2% /run
/dev/mmcblk0p2   29G  6.2G   21G  23% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M  120M  133M  48% /boot/firmware
tmpfs           374M  136K  374M   1% /run/user/1000
frank@frank-desktop:~$ 

Add: Settings, Terminal, and Text Editor to Activities Column (9 dots at bottom, scroll down, right click on "Add to Favorites".
text Editor
Go through and check all settings on Settings, Terminal, and Text Editor. Click 3 bars on Terminal, Text Editor, and Firefox Web Browser then preferences.

************

	The first thing is to download "freedom.zip" from my website, http://162.250.19.7/ which will come up with a green screen, and click on "freedom/" which will open the directory, and then click on "freedom.zip", then click "Save File" and click "OK" Which if this is the first file you are trying to save will show, in my case, a little house icon and "frank", followed by Downloads. We want to save "freedom.zip" to the main user (house icon) so I click on "(frank)" so it will go into my home directory. Later in the process there is a command "cd ~/freedom" which is going to look for the directory "freedom" in the main users (frank in my case) home directory. Now click "Save" at the top right. Now click on the "file folder icon" (Files) and one should see the house icon with "Home" and freedom.zip lower on the page.
	Right click on "freedom.zip" and click on "Extract Here" which will put a directory "freedom" up on the page. Doubble click on "freedom" to open it, and doubble click on "2021-06-15-Install-..." which is this file. Hopefully your monitor is wide enough to be able to have two windows open at once, the directions on one and the commands and results on the other, since I will just copy the text from the screen as I go through the build and paste it to this file. I will basically be following the directions on the old install "2019-12-26-Install..." which was the dual boot Raspian Desktop install on an old Windows 7 notebook and is almost the same for any Raspiain install. The only difference is the text that comes out as it installs to an x86 processor rather than an ARM processor.

	At this point, you have your computer setup, and up and running linux (Ubuntu 64 Desktop). In the folder Home (house icon), make a folder (click Top right 3 bars, then click the file folder top right (New Folder)) the New Folder name is: Acme.com and then click Create. The folder "Acme.com" should now be shown. Doubble click on this folder to open it, it should be empty.

	On Firefox click the "+" (Open a new tab), click "... Enter Address", and enter: http://acme.com/ and then press enter. This brings up a green page labeled "ACME Laboratories." Right click in the green - "Save Page  as ..." The Name is: ACME Laboratories.html, with a house icon and "(frank)" (the primary user) followed by "Downloads" so doubble click on the folder "Acme.com" which will replace the directory "Downloads", and click Save at the upper right. Now you should have a folder and an html file in the Acme.com folder.

	Back on the green "Home" page, the third black bullet down (The ACME Labs freeware library.) click on "thttpd" - tiny/turbo/throttling web server. Right click on green - "Save as ..." click, Name: thttpd.html with "house icon (frank)" and "Acme.com" and at page top right, click "Save." Now you should have another thttpd folder and html file. I think you get the idea.

	"thttpd - tiny/turbo/throttling HTTP server" page. Click "Fetch the software." Name: thttpd-2.29.tar.gz (this number could grow), with "(frank)" "Acme.com" - click "Save File" and OK, the Name thttpd-2.29.tar.gz and house icon (frank) Acme.com click on Save top right.

	The "Release notes" are lower down the page so we don't need to click and save them.

	Click "comparison chart" right click and "Save as ..." click, Name: Web Server Comparisons.html with "(frank)" "Acme.com" and click "Save." You will see the benchmarks were last updated 12jul98, about 23 years ago, and computers are much faster now! go back a page.

	The "(URL-traffic-based throttling)" is in thttpd man page.html.

	Click "HTMLized man page" right click and "Save as ..." click, Name: thttpd man page.html with "(frank)" "Acme.com" click "Save", go back one page.

	Click "thttpd notes", right click "Save as ..." click, Name: thttpd notes.html, with "(frank)" "Acme.com" click "Save", go back one page.

	Click "options guide", right click "Save as ..." click, Name: Configuration Options.html, with "(frank)" "Acme.com", click "Save", go back one page.

	Click "auxiliary programs", right click "Save as ..." click, Name: Auxiliary Programs.html, with "(frank)" "Acme.com", click "Save".
	Under "auxiliary programs" we now want to save all 5 of these man pages.

	Click makeweb page highlight, right click "Save as ..." click, Name: makeweb man page.html, with "(frank)" Acme.com", click "Save", go back one page.

	Click htpasswd page highlight, right click, "Save as ...", click, Name: htpasswd man page.html, with "(frank)" "Acme.com", click "Save", go back one page.

	Click ssi page highlight, right click, "Save as ...", click, Name: ssi man page.html, with "(frank)" "Acme.com", click "Save", go back one page.

	Click redirect page highlight, right click, "Save as ...", click, Name: redirect man page.html, with "(frank)" "Acme.com", click "Save", go back one page.

	Click syslogtocern page highlight, right click, "Save as ..." click, Name: syslogtocern man page.html, with "(frank)" "Acme.com", click "Save", go back one page. We have saved all 5 axillary program man pages so go back one more page.

	Click "web server comparisons", right click "Save as ..." click, Name: Web Server Comparisons.html, with "(frank)" "Acme.com", click "Save".
	The "http_load - multiprocessing http test client" is the documentation on the benchmark program if you are interested. It is after the benchmark test system paragraph.

	Click "other web resources", right click "Save as ..." click, Name: Other Web Resources.html, with "(frank)" "Acme.com", click "Save".

	That should cover most of what we need for thttpd, and can now quit the web browser.

	Click the left column "Text Editor" icon and at the top (3 bars) click and select Preferences. Under "View", we want everything BUT "Display right margin at column: " and Display grid pattern" so we have line numbers, and lines that may be several lines long. You might also want to check the other options as well.
      
	In File manager: (The file folder icon down the left side "File").
	Open /Home/Acme.com (dobble click on Acme.com).
	Right click on thttpd-2.29.tar.gz and click "Extract Here." You should now see a directory labeled "thttpd-2.29." Double click this directory to open it. At this point, you will want to make a "New Window" by right clicking on the "Text Editor" (left column icon) and clicking "New Window" then go  back to the window "Home/Acme.com/thttpd-2.29" (left column "File" icon) and doubble Click on "INSTALL." These are the instructions we need to install thttpd. Since thttpd is a portable program, we will have to build it for our machine.

	Click the left column "File" icon to bring "thttpd-2.29" back. The first thing to do is read through the "config.h" file to get an idea what thttpd does and its controls, so build a new window in the left "Text Editor" icon and then move the window to the side and double click on the file "config.h" (opening "config.h" in Text Editor). We need to make a change - at line 130, (a blank line), add 2 more blank lines by pressing enter. Highlight line 127, (#define TILDE_MAP_1 "users"), right click and select copy. Move to blank line #131, right click and select paste. Line 131 should now be the same as line 127. Select "SAVE" at the top of the window (config.h). This is so we can use different "users" for our website with different passwords from "(frank)" for another layer of security. You might want to read through the "config.h" file to get an idea of what "thttpd" can do. The file "config.h" can now be closed.

	Open a "terminal" full screen, (click on the 9 dots icon in the left "Favorites" column, scroll to the terminal icon, right click and "Add to Favorites" to put it in the left "Favorites" column).

frank@frank-desktop:~$ cd /etc
frank@frank-desktop:/etc$ cat group    # (we are looking for a group "www")
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,frank
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:frank
floppy:x:25:
tape:x:26:
sudo:x:27:frank
audio:x:29:pulse
dip:x:30:frank
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:frank
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
systemd-timesync:x:104:
crontab:x:105:
messagebus:x:106:
input:x:107:
kvm:x:108:
render:x:109:
syslog:x:110:
tss:x:111:
bluetooth:x:112:
ssl-cert:x:113:
uuidd:x:114:
tcpdump:x:115:
ssh:x:116:
avahi-autoipd:x:117:
rdma:x:118:
rtkit:x:119:
netdev:x:120:
avahi:x:121:
lpadmin:x:122:frank
nm-openvpn:x:123:
whoopsie:x:124:
sssd:x:125:
scanner:x:126:saned
saned:x:127:
colord:x:128:
geoclue:x:129:
pulse:x:130:
pulse-access:x:131:
gdm:x:132:
lxd:x:133:frank
systemd-coredump:x:999:
frank:x:1000:
sambashare:x:134:frank
frank@frank-desktop:/etc$ 

	Since there is no group "www" with the user "(frank)" we will need to add this, getting the directions by using "--help" to see our options.

frank@frank-desktop:/etc$ addgroup --help
adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--add_extra_groups]
[--encrypt-home] USER
   Add a normal user

adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
[--disabled-login] [--add_extra_groups] USER
   Add a system user

adduser --group [--gid ID] GROUP
addgroup [--gid ID] GROUP
   Add a user group

addgroup --system [--gid ID] GROUP
   Add a system group

adduser USER GROUP
   Add an existing user to an existing group

general options:
  --quiet | -q      don't give process information to stdout
  --force-badname   allow usernames which do not match the
                    NAME_REGEX[_SYSTEM] configuration variable
  --extrausers      uses extra users as the database
  --help | -h       usage message
  --version | -v    version number and copyright
  --conf | -c FILE  use FILE as configuration file

*******

frank@frank-desktop:/etc$ 

	From this we get the commands we need to add a system group "www" and make "(frank)" a member of this group.


addgroup --system [--gid ID] GROUP
   Add a system group

adduser USER GROUP
   Add an existing user to an existing group

	We need to add a system group "www" and make "(frank)" a member of this group.

frank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ sudo addgroup --system www
[sudo] password for frank: 
Adding group `www' (GID 135) ...
Done.
frank@frank-desktop:/etc$ 

frank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ sudo adduser frank www
Adding user `frank' to group `www' ...
Adding user frank to group www
Done.
frank@frank-desktop:/etc$ 

frank@frank-desktop:/etc$ cat group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,frank
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:frank
floppy:x:25:
tape:x:26:
sudo:x:27:frank
audio:x:29:pulse
dip:x:30:frank
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:frank
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
systemd-timesync:x:104:
crontab:x:105:
messagebus:x:106:
input:x:107:
kvm:x:108:
render:x:109:
syslog:x:110:
tss:x:111:
bluetooth:x:112:
ssl-cert:x:113:
uuidd:x:114:
tcpdump:x:115:
ssh:x:116:
avahi-autoipd:x:117:
rdma:x:118:
rtkit:x:119:
netdev:x:120:
avahi:x:121:
lpadmin:x:122:frank
nm-openvpn:x:123:
whoopsie:x:124:
sssd:x:125:
scanner:x:126:saned
saned:x:127:
colord:x:128:
geoclue:x:129:
pulse:x:130:
pulse-access:x:131:
gdm:x:132:
lxd:x:133:frank
systemd-coredump:x:999:
frank:x:1000:
sambashare:x:134:frank
www:x:135:frank
frank@frank-desktop:/etc$ 

	Success, Group "www" has a user "(frank)" and is also less than 1000, (the number will probably be different than 135).

	thttpd is missing some directories so if we add them it will compile without any problems.

frank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ cd /usr/local
frank@frank-desktop:/usr/local$ ls -al
total 40
drwxr-xr-x 10 root root 4096 Apr 21 17:52 .
drwxr-xr-x 11 root root 4096 Apr 21 17:52 ..
drwxr-xr-x  2 root root 4096 Apr 21 17:52 bin
drwxr-xr-x  2 root root 4096 Apr 21 17:52 etc
drwxr-xr-x  2 root root 4096 Apr 21 17:52 games
drwxr-xr-x  2 root root 4096 Apr 21 17:52 include
drwxr-xr-x  3 root root 4096 Apr 21 17:52 lib
lrwxrwxrwx  1 root root    9 Apr 21 17:52 man -> share/man
drwxr-xr-x  2 root root 4096 Apr 21 17:52 sbin
drwxr-xr-x  7 root root 4096 Apr 21 18:00 share
drwxr-xr-x  2 root root 4096 Apr 21 17:52 src
frank@frank-desktop:/usr/local$ 

frank@frank-desktop:/usr/local$ cd man
frank@frank-desktop:/usr/local/man$ ls -al
total 8
drwxr-xr-x 2 root root 4096 Apr 21 17:52 .
drwxr-xr-x 7 root root 4096 Apr 21 18:00 ..
frank@frank-desktop:/usr/local/man$ 

	We need to add directories; “man1” and “man8” to the “man” directory, “man 8” is in the program but “man1” is not so we will add both.

frank@frank-desktop:/usr/local/man$ 
frank@frank-desktop:/usr/local/man$ sudo mkdir -p /usr/local/man/man1 man8
[sudo] password for frank: 
frank@frank-desktop:/usr/local/man$ ls -al
total 16
drwxr-xr-x 4 root root 4096 May 26 13:31 .
drwxr-xr-x 7 root root 4096 Apr 21 18:00 ..
drwxr-xr-x 2 root root 4096 May 26 13:31 man1
drwxr-xr-x 2 root root 4096 May 26 13:31 man8
frank@frank-desktop:/usr/local/man$ 

frank@frank-desktop:/usr/local/man$ 
frank@frank-desktop:/usr/local/man$ cd ~/Acme.com/thttpd-2.29
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 

	This is installing thttpd on a RaspberryPi 400 running ubuntu-21.04-desktop-arm64. So you have an idea of what to expect, I am including all of the printout that happens in each step.

	The directions from "INSTALL":
INSTALL


To build:

	% ./configure

	Edit config.h to change the configuration options if necessary.

	% make


To install:

	% make install

	Edit one of your system rc files to run thttpd at boot time.  Do NOT run it from inetd, that setup is inefficient so thttpd doesn't support it.

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ ls    # (This is to make sure we are at the right place.)
aclocal.m4  config.guess  configure     extras     FILES       install-sh  Makefile.in  mime_encodings.txt  mmc.h    strerror.c     thttpd.8  timers.h
cgi-bin     config.h      configure.in  fdwatch.c  index.html  libhttpd.c  match.c      mime_types.txt      README   tdate_parse.c  thttpd.c  TODO
cgi-src     config.sub    contrib       fdwatch.h  INSTALL     libhttpd.h  match.h      mmc.c               scripts  tdate_parse.h  timers.c  version.h
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 

	Step #1 of "INSTALL"

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ ./configure
creating cache ./config.cache
checking host system type... Invalid configuration `aarch64-pc-linux-gnuoldld': machine `aarch64-pc' not recognized

checking target system type... Invalid configuration `aarch64-pc-linux-gnuoldld': machine `aarch64-pc' not recognized

checking build system type... Invalid configuration `aarch64-pc-linux-gnuoldld': machine `aarch64-pc' not recognized

checking for gcc... no
checking for cc... no
configure: error: no acceptable cc found in $PATH
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 

	We are missing "gcc" and probably "make" so we will install both.

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ sudo apt install gcc
[sudo] password for frank: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  cryptsetup-bin dctrl-tools dmeventd dmraid dpkg-repack efibootmgr gir1.2-timezonemap-1.0 gir1.2-xkl-1.0 grub-common grub-efi-arm64
  grub-efi-arm64-bin grub-efi-arm64-signed grub2-common kpartx kpartx-boot libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16
  liblvm2cmd2.03 libtimezonemap-data libtimezonemap1 lvm2 os-prober python3-icu python3-pam rdate thin-provisioning-tools
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  gcc-10 libasan6 libatomic1 libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev libgcc-10-dev libitm1 liblsan0 libnsl-dev libtirpc-dev
  libtsan0 libubsan1 linux-libc-dev manpages-dev rpcsvc-proto
Suggested packages:
  gcc-multilib make autoconf automake libtool flex bison gcc-doc gcc-10-doc gcc-10-locales glibc-doc
The following NEW packages will be installed:
  gcc gcc-10 libasan6 libatomic1 libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev libgcc-10-dev libitm1 liblsan0 libnsl-dev libtirpc-dev
  libtsan0 libubsan1 linux-libc-dev manpages-dev rpcsvc-proto
0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.3 MB of archives.
After this operation, 108 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 libcc1-0 arm64 11.1.0-1ubuntu1~21.04 [46.4 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 libitm1 arm64 11.1.0-1ubuntu1~21.04 [24.1 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 libatomic1 arm64 11.1.0-1ubuntu1~21.04 [9,868 B]
Get:4 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 libasan6 arm64 11.1.0-1ubuntu1~21.04 [2,103 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 liblsan0 arm64 11.1.0-1ubuntu1~21.04 [858 kB]                                    
Get:6 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 libtsan0 arm64 11.1.0-1ubuntu1~21.04 [2,060 kB]                                  
Get:7 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 libubsan1 arm64 11.1.0-1ubuntu1~21.04 [824 kB]                                   
Get:8 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libgcc-10-dev arm64 10.3.0-1ubuntu1 [907 kB]                                             
Get:9 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 gcc-10 arm64 10.3.0-1ubuntu1 [15.8 MB]                                                   
Get:10 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 gcc arm64 4:10.3.0-1ubuntu1 [5,228 B]                                                   
Get:11 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libc-dev-bin arm64 2.33-0ubuntu5 [18.3 kB]                                              
Get:12 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libc-devtools arm64 2.33-0ubuntu5 [25.7 kB]                                             
Get:13 http://ports.ubuntu.com/ubuntu-ports hirsute-updates/main arm64 linux-libc-dev arm64 5.11.0-17.18 [1,181 kB]                                    
Get:14 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libcrypt-dev arm64 1:4.4.17-1ubuntu3 [109 kB]                                           
Get:15 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 rpcsvc-proto arm64 1.4.2-0ubuntu4 [59.7 kB]                                             
Get:16 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libtirpc-dev arm64 1.3.1-1build1 [185 kB]                                               
Get:17 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libnsl-dev arm64 1.3.0-0ubuntu3 [65.6 kB]                                               
Get:18 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 libc6-dev arm64 2.33-0ubuntu5 [1,719 kB]                                                
Get:19 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 manpages-dev all 5.10-1 [2,309 kB]                                                      
Fetched 28.3 MB in 2min 4s (228 kB/s)
Selecting previously unselected package libcc1-0:arm64.
(Reading database ... 170825 files and directories currently installed.)
Preparing to unpack .../00-libcc1-0_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking libcc1-0:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package libitm1:arm64.
Preparing to unpack .../01-libitm1_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking libitm1:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package libatomic1:arm64.
Preparing to unpack .../02-libatomic1_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking libatomic1:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package libasan6:arm64.
Preparing to unpack .../03-libasan6_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking libasan6:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package liblsan0:arm64.
Preparing to unpack .../04-liblsan0_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking liblsan0:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package libtsan0:arm64.
Preparing to unpack .../05-libtsan0_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking libtsan0:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package libubsan1:arm64.
Preparing to unpack .../06-libubsan1_11.1.0-1ubuntu1~21.04_arm64.deb ...
Unpacking libubsan1:arm64 (11.1.0-1ubuntu1~21.04) ...
Selecting previously unselected package libgcc-10-dev:arm64.
Preparing to unpack .../07-libgcc-10-dev_10.3.0-1ubuntu1_arm64.deb ...
Unpacking libgcc-10-dev:arm64 (10.3.0-1ubuntu1) ...
Selecting previously unselected package gcc-10.
Preparing to unpack .../08-gcc-10_10.3.0-1ubuntu1_arm64.deb ...
Unpacking gcc-10 (10.3.0-1ubuntu1) ...
Selecting previously unselected package gcc.
Preparing to unpack .../09-gcc_4%3a10.3.0-1ubuntu1_arm64.deb ...
Unpacking gcc (4:10.3.0-1ubuntu1) ...
Selecting previously unselected package libc-dev-bin.
Preparing to unpack .../10-libc-dev-bin_2.33-0ubuntu5_arm64.deb ...
Unpacking libc-dev-bin (2.33-0ubuntu5) ...
Selecting previously unselected package libc-devtools.
Preparing to unpack .../11-libc-devtools_2.33-0ubuntu5_arm64.deb ...
Unpacking libc-devtools (2.33-0ubuntu5) ...
Selecting previously unselected package linux-libc-dev:arm64.
Preparing to unpack .../12-linux-libc-dev_5.11.0-17.18_arm64.deb ...
Unpacking linux-libc-dev:arm64 (5.11.0-17.18) ...
Selecting previously unselected package libcrypt-dev:arm64.
Preparing to unpack .../13-libcrypt-dev_1%3a4.4.17-1ubuntu3_arm64.deb ...
Unpacking libcrypt-dev:arm64 (1:4.4.17-1ubuntu3) ...
Selecting previously unselected package rpcsvc-proto.
Preparing to unpack .../14-rpcsvc-proto_1.4.2-0ubuntu4_arm64.deb ...
Unpacking rpcsvc-proto (1.4.2-0ubuntu4) ...
Selecting previously unselected package libtirpc-dev:arm64.
Preparing to unpack .../15-libtirpc-dev_1.3.1-1build1_arm64.deb ...
Unpacking libtirpc-dev:arm64 (1.3.1-1build1) ...
Selecting previously unselected package libnsl-dev:arm64.
Preparing to unpack .../16-libnsl-dev_1.3.0-0ubuntu3_arm64.deb ...
Unpacking libnsl-dev:arm64 (1.3.0-0ubuntu3) ...
Selecting previously unselected package libc6-dev:arm64.
Preparing to unpack .../17-libc6-dev_2.33-0ubuntu5_arm64.deb ...
Unpacking libc6-dev:arm64 (2.33-0ubuntu5) ...
Selecting previously unselected package manpages-dev.
Preparing to unpack .../18-manpages-dev_5.10-1_all.deb ...
Unpacking manpages-dev (5.10-1) ...
Setting up manpages-dev (5.10-1) ...
Setting up linux-libc-dev:arm64 (5.11.0-17.18) ...
Setting up libasan6:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up libtirpc-dev:arm64 (1.3.1-1build1) ...
Setting up rpcsvc-proto (1.4.2-0ubuntu4) ...
Setting up libatomic1:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up libubsan1:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up libnsl-dev:arm64 (1.3.0-0ubuntu3) ...
Setting up libcrypt-dev:arm64 (1:4.4.17-1ubuntu3) ...
Setting up libc-dev-bin (2.33-0ubuntu5) ...
Setting up libcc1-0:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up liblsan0:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up libitm1:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up libc-devtools (2.33-0ubuntu5) ...
Setting up libtsan0:arm64 (11.1.0-1ubuntu1~21.04) ...
Setting up libgcc-10-dev:arm64 (10.3.0-1ubuntu1) ...
Setting up gcc-10 (10.3.0-1ubuntu1) ...
Setting up libc6-dev:arm64 (2.33-0ubuntu5) ...
Setting up gcc (4:10.3.0-1ubuntu1) ...
Processing triggers for man-db (2.9.4-2) ...
Processing triggers for libc-bin (2.33-0ubuntu5) ...
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 

***************

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ sudo apt install make
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  cryptsetup-bin dctrl-tools dmeventd dmraid dpkg-repack efibootmgr gir1.2-timezonemap-1.0 gir1.2-xkl-1.0 grub-common grub-efi-arm64
  grub-efi-arm64-bin grub-efi-arm64-signed grub2-common kpartx kpartx-boot libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16
  liblvm2cmd2.03 libtimezonemap-data libtimezonemap1 lvm2 os-prober python3-icu python3-pam rdate thin-provisioning-tools
Use 'sudo apt autoremove' to remove them.
Suggested packages:
  make-doc
The following NEW packages will be installed:
  make
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 158 kB of archives.
After this operation, 406 kB of additional disk space will be used.
Get:1 http://ports.ubuntu.com/ubuntu-ports hirsute/main arm64 make arm64 4.3-4ubuntu1 [158 kB]
Fetched 158 kB in 1s (138 kB/s)
Selecting previously unselected package make.
(Reading database ... 174762 files and directories currently installed.)
Preparing to unpack .../make_4.3-4ubuntu1_arm64.deb ...
Unpacking make (4.3-4ubuntu1) ...
Setting up make (4.3-4ubuntu1) ...
Processing triggers for man-db (2.9.4-2) ...
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 

	Now lets try again.

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ ./configure
loading cache ./config.cache
checking host system type... Invalid configuration `aarch64-pc-linux-gnuoldld': machine `aarch64-pc' not recognized

checking target system type... Invalid configuration `aarch64-pc-linux-gnuoldld': machine `aarch64-pc' not recognized

checking build system type... Invalid configuration `aarch64-pc-linux-gnuoldld': machine `aarch64-pc' not recognized

checking for gcc... (cached) gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking gcc version... (cached) 10
checking how to link static binaries... (cached) unknown
checking for __progname... (cached) yes
checking how to run the C preprocessor... (cached) gcc -E
checking for fcntl.h... (cached) yes
checking for grp.h... (cached) yes
checking for memory.h... (cached) yes
checking for paths.h... (cached) yes
checking for poll.h... (cached) yes
checking for sys/poll.h... (cached) yes
checking for sys/devpoll.h... (cached) no
checking for sys/event.h... (cached) no
checking for osreldate.h... (cached) no
checking whether time.h and sys/time.h may both be included... (cached) yes
checking for dirent.h that defines DIR... (cached) yes
checking for opendir in -ldir... (cached) no
checking for /usr/local/v6/lib... no
checking for gethostbyname... (cached) yes
checking for socket... (cached) yes
checking for main in -linet6... (cached) no
checking for crypt... (cached) no
checking for crypt in -lcrypt... (cached) yes
checking for hstrerror... (cached) yes
checking for strerror... (cached) yes
checking for waitpid... (cached) yes
checking for vsnprintf... (cached) yes
checking for daemon... (cached) yes
checking for setsid... (cached) yes
checking for setlogin... (cached) no
checking for getaddrinfo... (cached) yes
checking for getnameinfo... (cached) yes
checking for gai_strerror... (cached) yes
checking for kqueue... (cached) no
checking for sigset... (cached) yes
checking for atoll... (cached) yes
checking for unistd.h... (cached) yes
checking for getpagesize... (cached) yes
checking for working mmap... (cached) yes
checking for select... (cached) yes
checking for poll... (cached) yes
checking if struct tm has tm_gmtoff member... (cached) yes
checking if int64_t exists... (cached) yes
checking if socklen_t exists... (cached) yes
checking whether make sets ${MAKE}... (cached) yes
checking for a BSD compatible install... (cached) /usr/bin/install -c
creating ./config.status
creating Makefile
creating cgi-src/Makefile
creating extras/Makefile
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 


	It completed so on to the next step.

	Step #2 of "INSTALL"

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ make
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c thttpd.c
thttpd.c: In function ‘main’:
thttpd.c:611:12: warning: implicit declaration of function ‘sigset’; did you mean ‘isset’? [-Wimplicit-function-declaration]
  611 |     (void) sigset( SIGTERM, handle_term );
      |            ^~~~~~
      |            isset
thttpd.c:487:12: warning: ignoring return value of ‘getcwd’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  487 |     (void) getcwd( cwd, sizeof(cwd) - 1 );
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
thttpd.c: In function ‘handle_alrm’:
thttpd.c:312:9: warning: ignoring return value of ‘chdir’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  312 |  (void) chdir( "/tmp" );
      |         ^~~~~~~~~~~~~~~
rm -f mime_encodings.h
sed < mime_encodings.txt > mime_encodings.h \
  -e 's/#.*//' -e 's/[ 	]*$//' -e '/^$/d' \
  -e 's/[ 	][ 	]*/", 0, "/' -e 's/^/{ "/' -e 's/$/", 0 },/'
rm -f mime_types.h
sed < mime_types.txt > mime_types.h \
  -e 's/#.*//' -e 's/[ 	]*$//' -e '/^$/d' \
  -e 's/[ 	][ 	]*/", 0, "/' -e 's/^/{ "/' -e 's/$/", 0 },/'
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c libhttpd.c
libhttpd.c: In function ‘cgi_child’:
libhttpd.c:3557:12: warning: implicit declaration of function ‘sigset’; did you mean ‘isset’? [-Wimplicit-function-declaration]
 3557 |     (void) sigset( SIGPIPE, SIG_DFL );
      |            ^~~~~~
      |            isset
libhttpd.c: In function ‘ls’:
libhttpd.c:2781:13: warning: ignoring return value of ‘nice’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2781 |      (void) nice( CGI_NICE );
      |             ^~~~~~~~~~~~~~~~
libhttpd.c: In function ‘cgi_child’:
libhttpd.c:3533:12: warning: ignoring return value of ‘nice’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 3533 |     (void) nice( CGI_NICE );
      |            ^~~~~~~~~~~~~~~~
libhttpd.c:3551:13: warning: ignoring return value of ‘chdir’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 3551 |      (void) chdir( directory );  /* ignore errors */
      |             ^~~~~~~~~~~~~~~~~~
libhttpd.c: In function ‘post_post_garbage_hack’:
libhttpd.c:3249:12: warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 3249 |     (void) read( hc->conn_fd, buf, sizeof(buf) );
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/string.h:519,
                 from /usr/include/memory.h:29,
                 from libhttpd.c:47:
In function ‘strncpy’,
    inlined from ‘ls’ at libhttpd.c:2846:10:
/usr/include/aarch64-linux-gnu/bits/string_fortified.h:95:10: warning: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |       __glibc_objsize (__dest));
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~
libhttpd.c: In function ‘ls’:
libhttpd.c:64:25: note: length computed here
   64 | # define NAMLEN(dirent) strlen((dirent)->d_name)
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
libhttpd.c:2845:12: note: in expansion of macro ‘NAMLEN’
 2845 |   namlen = NAMLEN(de);
      |            ^~~~~~
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c fdwatch.c
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c mmc.c
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c timers.c
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c match.c
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I. -c tdate_parse.c
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I.  -o thttpd thttpd.o libhttpd.o fdwatch.o mmc.o timers.o match.o tdate_parse.o  -lcrypt  
for i in cgi-src extras ; do ( \
    cd $i ; \
    pwd ; \
    make  \
	WEBDIR=/usr/local/www \
	CGIBINDIR=/usr/local/www/cgi-bin \
	MANDIR=/usr/local/man \
	WEBGROUP=www \
) ; done
/home/frank/Acme.com/thttpd-2.29/cgi-src
make[1]: Entering directory '/home/frank/Acme.com/thttpd-2.29/cgi-src'
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I.. -c redirect.c
gcc   redirect.o -lcrypt  -o redirect
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I.. -c ssi.c
In file included from /usr/include/string.h:519,
                 from ssi.c:30:
In function ‘strncpy’,
    inlined from ‘get_filename.constprop’ at ssi.c:183:9:
/usr/include/aarch64-linux-gnu/bits/string_fortified.h:95:10: warning: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |       __glibc_objsize (__dest));
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~
ssi.c: In function ‘get_filename.constprop’:
ssi.c:169:10: note: length computed here
  169 |     fl = strlen( filename );
      |          ^~~~~~~~~~~~~~~~~~
gcc   ssi.o ../match.o -lcrypt  -o ssi
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I.. -c phf.c
gcc   phf.o -lcrypt  -o phf
make[1]: Leaving directory '/home/frank/Acme.com/thttpd-2.29/cgi-src'
/home/frank/Acme.com/thttpd-2.29/extras
make[1]: Entering directory '/home/frank/Acme.com/thttpd-2.29/extras'
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I.. -DWEBDIR=\"/usr/local/www\" -c makeweb.c
makeweb.c: In function ‘check_dir’:
makeweb.c:97:9: warning: ignoring return value of ‘chown’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   97 |  (void) chown( dirname, -1, gid );
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~
gcc  makeweb.o -o makeweb -lcrypt  
gcc -O2 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1  -I.. -DWEBDIR=\"/usr/local/www\" -c htpasswd.c
htpasswd.c: In function ‘main’:
htpasswd.c:215:5: warning: ignoring return value of ‘system’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  215 |     system(command);
      |     ^~~~~~~~~~~~~~~
htpasswd.c: In function ‘add_password’:
htpasswd.c:115:9: warning: ignoring return value of ‘fgets’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  115 |  (void) fgets( pass, sizeof(pass), stdin );
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gcc   htpasswd.o -o htpasswd -lcrypt 
make[1]: Leaving directory '/home/frank/Acme.com/thttpd-2.29/extras'
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 


	Again we completed so lets try the next step.

	Step #3 from "INSTALL" and we have to use "sudo" on this because the program is adding directories that are owned by "root".


frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ sudo make install
[sudo] password for frank: 
mkdir -p /usr/local/sbin
/usr/bin/install -c -m 555 -o bin -g bin thttpd /usr/local/sbin
mkdir -p /usr/local/man/man8
/usr/bin/install -c -m 444 -o bin -g bin thttpd.8 /usr/local/man/man8
for i in cgi-src extras ; do ( \
    cd $i ; \
    pwd ; \
    make  \
	WEBDIR=/usr/local/www \
	CGIBINDIR=/usr/local/www/cgi-bin \
	MANDIR=/usr/local/man \
	WEBGROUP=www \
	install \
) ; done
/home/frank/Acme.com/thttpd-2.29/cgi-src
make[1]: Entering directory '/home/frank/Acme.com/thttpd-2.29/cgi-src'
mkdir -p /usr/local/www/cgi-bin
rm -f /usr/local/www/cgi-bin/redirect
cp redirect /usr/local/www/cgi-bin/redirect
rm -f /usr/local/man/man8/redirect.8
cp redirect.8 /usr/local/man/man8/redirect.8
rm -f /usr/local/www/cgi-bin/ssi
cp ssi /usr/local/www/cgi-bin/ssi
rm -f /usr/local/man/man8/ssi.8
cp ssi.8 /usr/local/man/man8/ssi.8
rm -f /usr/local/www/cgi-bin/phf
cp phf /usr/local/www/cgi-bin/phf
make[1]: Leaving directory '/home/frank/Acme.com/thttpd-2.29/cgi-src'
/home/frank/Acme.com/thttpd-2.29/extras
make[1]: Entering directory '/home/frank/Acme.com/thttpd-2.29/extras'
rm -f /usr/local/sbin/makeweb /usr/local/sbin/htpasswd /usr/local/sbin/syslogtocern
cp makeweb /usr/local/sbin/makeweb
chgrp www /usr/local/sbin/makeweb
chmod 2755 /usr/local/sbin/makeweb
cp htpasswd /usr/local/sbin/htpasswd
cp syslogtocern /usr/local/sbin/syslogtocern
rm -f /usr/local/man/man1/makeweb.1
cp makeweb.1 /usr/local/man/man1/makeweb.1
rm -f /usr/local/man/man1/htpasswd.1
cp htpasswd.1 /usr/local/man/man1/htpasswd.1
rm -f /usr/local/man/man8/syslogtocern.8
cp syslogtocern.8 /usr/local/man/man8/syslogtocern.8
make[1]: Leaving directory '/home/frank/Acme.com/thttpd-2.29/extras'
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ 

**************

	"thttpd" is now installed. 
	The next thing is to add directories "logs" and "users" to the "www" directory.

frank@frank-desktop:~/Acme.com/thttpd-2.29$ 
frank@frank-desktop:~/Acme.com/thttpd-2.29$ cd /usr/local/www
frank@frank-desktop:/usr/local/www$ 
frank@frank-desktop:/usr/local/www$ ls -al
total 12
drwxr-xr-x  3 root root 4096 May 26 14:11 .
drwxr-xr-x 11 root root 4096 May 26 14:11 ..
drwxr-xr-x  2 root root 4096 May 26 14:11 cgi-bin
frank@frank-desktop:/usr/local/www$ 

frank@frank-desktop:/usr/local/www$ 
frank@frank-desktop:/usr/local/www$ sudo mkdir logs users
frank@frank-desktop:/usr/local/www$ ls -al
total 20
drwxr-xr-x  5 root root 4096 May 26 14:18 .
drwxr-xr-x 11 root root 4096 May 26 14:11 ..
drwxr-xr-x  2 root root 4096 May 26 14:11 cgi-bin
drwxr-xr-x  2 root root 4096 May 26 14:18 logs
drwxr-xr-x  2 root root 4096 May 26 14:18 users
frank@frank-desktop:/usr/local/www$ 

******************

	Now we go back one level so we can change the owner and group on everything in the "www" directory from "root:root" to "root:www".

frank@frank-desktop:/usr/local/www$ 
frank@frank-desktop:/usr/local/www$ cd ..
frank@frank-desktop:/usr/local$ 

frank@frank-desktop:/usr/local$ 
frank@frank-desktop:/usr/local$ sudo chown -vR root:www www
changed ownership of 'www/users' from root:root to root:www
changed ownership of 'www/cgi-bin/ssi' from root:root to root:www
changed ownership of 'www/cgi-bin/redirect' from root:root to root:www
changed ownership of 'www/cgi-bin/phf' from root:root to root:www
changed ownership of 'www/cgi-bin' from root:root to root:www
changed ownership of 'www/logs' from root:root to root:www
changed ownership of 'www' from root:root to root:www
frank@frank-desktop:/usr/local$ 

frank@frank-desktop:/usr/local$ 
frank@frank-desktop:/usr/local$ cd www
frank@frank-desktop:/usr/local/www$ ls -al
total 20
drwxr-xr-x  5 root www  4096 May 26 14:18 .
drwxr-xr-x 11 root root 4096 May 26 14:11 ..
drwxr-xr-x  2 root www  4096 May 26 14:11 cgi-bin
drwxr-xr-x  2 root www  4096 May 26 14:18 logs
drwxr-xr-x  2 root www  4096 May 26 14:18 users
frank@frank-desktop:/usr/local/www$ 

********* We need this!

	Now we need to change the permissions on "users" so those in the "www" group can write to this directory!     

frank@frank-desktop:/usr/local/www$ 
frank@frank-desktop:/usr/local/www$ sudo chmod -v 0775 users
mode of 'users' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
frank@frank-desktop:/usr/local/www$ ls -al
total 20
drwxr-xr-x  5 root www  4096 May 26 14:18 .
drwxr-xr-x 11 root root 4096 May 26 14:11 ..
drwxr-xr-x  2 root www  4096 May 26 14:11 cgi-bin
drwxr-xr-x  2 root www  4096 May 26 14:18 logs
drwxrwxr-x  2 root www  4096 May 26 14:18 users
frank@frank-desktop:/usr/local/www$ 

***********

	We now change back to the "(frank)" home directory and are going to add a "user" that belongs in the "www" group, from the help on "adduser" we see what we have to type.

frank@frank-desktop:/usr/local/www$ 
frank@frank-desktop:/usr/local/www$ cd
frank@frank-desktop:~$ 
frank@frank-desktop:~$ addgroup --help
adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--add_extra_groups]
[--encrypt-home] USER
   Add a normal user

adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
[--disabled-login] [--add_extra_groups] USER
   Add a system user

adduser --group [--gid ID] GROUP
addgroup [--gid ID] GROUP
   Add a user group

addgroup --system [--gid ID] GROUP
   Add a system group

adduser USER GROUP
   Add an existing user to an existing group

general options:
  --quiet | -q      don't give process information to stdout
  --force-badname   allow usernames which do not match the
                    NAME_REGEX[_SYSTEM] configuration variable
  --extrausers      uses extra users as the database
  --help | -h       usage message
  --version | -v    version number and copyright
  --conf | -c FILE  use FILE as configuration file

frank@frank-desktop:~$ 

********

frank@frank-desktop:~$ 

	For an example, I will add "ac0xl", my ham radio call sign, as a user for my website. One can think of these as different tabs or categories on your website. Use a different password for these "users" than the one you use for "(frank)" for more security. The information it asks for was for the "finger" program which most computers don't run for security reasons. I usually just use the "user" for the name and leave the rest blank. (This time I will use my real data.)

frank@frank-desktop:~$ 
frank@frank-desktop:~$ sudo adduser --add_extra_groups ac0xl
Adding user `ac0xl' ...
Adding new group `ac0xl' (1001) ...
Adding new user `ac0xl' (1001) with group `ac0xl' ...
Creating home directory `/home/ac0xl' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for ac0xl
Enter the new value, or press ENTER for the default
	Full Name []: Frank Anderson
	Room Number []: 651 N Broadway
	Work Phone []: 435-210-0710
	Home Phone []: 970-424-1451
	Other []: Green River UT 84525-0615
Is the information correct? [Y/n] y
Adding new user `ac0xl' to extra groups ...
Adding user `ac0xl' to group `dialout' ...
Adding user `ac0xl' to group `cdrom' ...
Adding user `ac0xl' to group `floppy' ...
Adding user `ac0xl' to group `audio' ...
Adding user `ac0xl' to group `video' ...
Adding user `ac0xl' to group `plugdev' ...
Adding user `ac0xl' to group `users' ...
frank@frank-desktop:~$ 
frank@frank-desktop:~$ 

frank@frank-desktop:~$ 
frank@frank-desktop:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,frank
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:ac0xl
fax:x:21:
voice:x:22:
cdrom:x:24:frank,ac0xl
floppy:x:25:ac0xl
tape:x:26:
sudo:x:27:frank
audio:x:29:pulse,ac0xl
dip:x:30:frank
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:ac0xl
sasl:x:45:
plugdev:x:46:frank,ac0xl
staff:x:50:
games:x:60:
users:x:100:ac0xl
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
systemd-timesync:x:104:
crontab:x:105:
messagebus:x:106:
input:x:107:
kvm:x:108:
render:x:109:
syslog:x:110:
tss:x:111:
bluetooth:x:112:
ssl-cert:x:113:
uuidd:x:114:
tcpdump:x:115:
ssh:x:116:
avahi-autoipd:x:117:
rdma:x:118:
rtkit:x:119:
netdev:x:120:
avahi:x:121:
lpadmin:x:122:frank
nm-openvpn:x:123:
whoopsie:x:124:
sssd:x:125:
scanner:x:126:saned
saned:x:127:
colord:x:128:
geoclue:x:129:
pulse:x:130:
pulse-access:x:131:
gdm:x:132:
lxd:x:133:frank
systemd-coredump:x:999:
frank:x:1000:
sambashare:x:134:frank
www:x:135:frank
ac0xl:x:1001:
frank@frank-desktop:~$ 
frank@frank-desktop:~$ 

adduser USER GROUP
   Add an existing user to an existing group

frank@frank-desktop:~$ 
frank@frank-desktop:~$ sudo adduser ac0xl www
Adding user `ac0xl' to group `www' ...
Adding user ac0xl to group www
Done.
frank@frank-desktop:~$ 

frank@frank-desktop:~$ 
frank@frank-desktop:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,frank
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:ac0xl
fax:x:21:
voice:x:22:
cdrom:x:24:frank,ac0xl
floppy:x:25:ac0xl
tape:x:26:
sudo:x:27:frank
audio:x:29:pulse,ac0xl
dip:x:30:frank
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:ac0xl
sasl:x:45:
plugdev:x:46:frank,ac0xl
staff:x:50:
games:x:60:
users:x:100:ac0xl
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
systemd-timesync:x:104:
crontab:x:105:
messagebus:x:106:
input:x:107:
kvm:x:108:
render:x:109:
syslog:x:110:
tss:x:111:
bluetooth:x:112:
ssl-cert:x:113:
uuidd:x:114:
tcpdump:x:115:
ssh:x:116:
avahi-autoipd:x:117:
rdma:x:118:
rtkit:x:119:
netdev:x:120:
avahi:x:121:
lpadmin:x:122:frank
nm-openvpn:x:123:
whoopsie:x:124:
sssd:x:125:
scanner:x:126:saned
saned:x:127:
colord:x:128:
geoclue:x:129:
pulse:x:130:
pulse-access:x:131:
gdm:x:132:
lxd:x:133:frank
systemd-coredump:x:999:
frank:x:1000:
sambashare:x:134:frank
www:x:135:frank,ac0xl
ac0xl:x:1001:
frank@frank-desktop:~$ 
frank@frank-desktop:~$ 

**************
frank@frank-desktop:~$ 
frank@frank-desktop:~$ cd /home
frank@frank-desktop:/home$ ls -al
total 16
drwxr-xr-x  4 root  root  4096 May 27 16:02 .
drwxr-xr-x 20 root  root  4096 Apr 21 18:13 ..
drwxr-x---  2 ac0xl ac0xl 4096 May 27 16:02 ac0xl
drwxr-x--- 21 frank frank 4096 May 27 13:04 frank
frank@frank-desktop:/home$ 

frank@frank-desktop:/home$ 
frank@frank-desktop:/home$ su ac0xl		# we have to change to user "(ac0xl)"
Password: 
ac0xl@frank-desktop:/home$ cd		# here we are still in "/home"
ac0xl@frank-desktop:~$ ls -al		# we are now in "(ac0xl)"
total 20
drwxr-x--- 2 ac0xl ac0xl 4096 May 27 16:02 .
drwxr-xr-x 4 root  root  4096 May 27 16:02 ..
-rw-r--r-- 1 ac0xl ac0xl  220 May 27 16:02 .bash_logout
-rw-r--r-- 1 ac0xl ac0xl 3771 May 27 16:02 .bashrc
-rw-r--r-- 1 ac0xl ac0xl  807 May 27 16:02 .profile

ac0xl@frank-desktop:~$ 				# if makeweb does not work (no permission) did you?: sudo chown -v 0775 /usr/local/www/users	#?
ac0xl@frank-desktop:~$ makeweb
Created web directory /usr/local/www/users/ac0xl
Created symbolic link /home/ac0xl/public_html
ac0xl@frank-desktop:~$ 
ac0xl@frank-desktop:~$ ls -al
total 20
drwxr-x--- 2 ac0xl ac0xl 4096 May 27 16:18 .
drwxr-xr-x 4 root  root  4096 May 27 16:02 ..
-rw-r--r-- 1 ac0xl ac0xl  220 May 27 16:02 .bash_logout
-rw-r--r-- 1 ac0xl ac0xl 3771 May 27 16:02 .bashrc
-rw-r--r-- 1 ac0xl ac0xl  807 May 27 16:02 .profile
lrwxrwxrwx 1 ac0xl www     26 May 27 16:18 public_html -> /usr/local/www/users/ac0xl
ac0xl@frank-desktop:~$ 
ac0xl@frank-desktop:~$ 
ac0xl@frank-desktop:~$ exit     # changing to (frank)
exit
frank@frank-desktop:/home$ 
frank@frank-desktop:/home$ cd /usr/local/www/users
frank@frank-desktop:/usr/local/www/users$ ls -al
total 12
drwxrwxr-x 3 root  www   4096 May 27 16:18 .
drwxr-xr-x 5 root  www   4096 May 26 14:18 ..
drwxr-xr-x 2 ac0xl ac0xl 4096 May 27 16:18 ac0xl
frank@frank-desktop:/usr/local/www/users$ 
frank@frank-desktop:/usr/local/www/users$ cd ac0xl
frank@frank-desktop:/usr/local/www/users/ac0xl$ ls -al
total 8
drwxr-xr-x 2 ac0xl ac0xl 4096 May 27 16:18 .
drwxrwxr-x 3 root  www   4096 May 27 16:18 ..
frank@frank-desktop:/usr/local/www/users/ac0xl$ 

	So far so good! We now have a main www user installed.

	Other ideas for web "users" could be: documents, downloads, games, memes, music, notices, pictures, videos, etc., just categories of what you want on your website, or what you want to share. This time we will use a different process to add only www users.

frank@frank-desktop:~$ addgroup --help
adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--add_extra_groups]
[--encrypt-home] USER
   Add a normal user


	Again the process:
		sudo adduser --ingroup www videos    # (new web user "videos")
			(use a password that is different from the one for "(frank)")
		su videos    # (shell to user "videos")
		makeweb
		exit         # (exit the shell back to where you were)

******************** Lets try adding "documents".

frank@frank-desktop:~$ 
frank@frank-desktop:~$ sudo adduser --ingroup www documents
[sudo] password for frank: 
Adding user `documents' ...
Adding new user `documents' (1002) with group `www' ...
Creating home directory `/home/documents' ...
Copying files from `/etc/skel' ...
New password: 
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password: 
passwd: password updated successfully
Changing the user information for documents
Enter the new value, or press ENTER for the default
	Full Name []: documents
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] y
frank@frank-desktop:~$ 
frank@frank-desktop:~$ 

frank@frank-desktop:~$ 
frank@frank-desktop:~$ ls -al /home
total 20
drwxr-xr-x  5 root      root  4096 May 28 16:33 .
drwxr-xr-x 20 root      root  4096 Apr 21 18:13 ..
drwxr-x---  2 ac0xl     ac0xl 4096 May 27 16:52 ac0xl
drwxr-x---  2 documents www   4096 May 28 16:39 documents
drwxr-x--- 21 frank     frank 4096 May 27 13:04 frank
frank@frank-desktop:~$ 

frank@frank-desktop:~$ 
frank@frank-desktop:~$ su documents
Password: 
documents@frank-desktop:/home/frank$ 
documents@frank-desktop:/home/frank$ cd		# changing into the directory: /home/documents, since we are now user "documents".
documents@frank-desktop:~$ ls -al
total 20
drwxr-x--- 2 documents www  4096 May 28 16:33 .
drwxr-xr-x 5 root      root 4096 May 28 16:33 ..
-rw-r--r-- 1 documents www   220 May 28 16:33 .bash_logout
-rw-r--r-- 1 documents www  3771 May 28 16:33 .bashrc
-rw-r--r-- 1 documents www   807 May 28 16:33 .profile
documents@frank-desktop:~$ 
documents@frank-desktop:~$ makeweb
Created web directory /usr/local/www/users/documents
Created symbolic link /home/documents/public_html
documents@frank-desktop:~$ 
documents@frank-desktop:~$ ls -al
total 20
drwxr-x--- 2 documents www  4096 May 28 16:37 .
drwxr-xr-x 5 root      root 4096 May 28 16:33 ..
-rw-r--r-- 1 documents www   220 May 28 16:33 .bash_logout
-rw-r--r-- 1 documents www  3771 May 28 16:33 .bashrc
-rw-r--r-- 1 documents www   807 May 28 16:33 .profile
lrwxrwxrwx 1 documents www    30 May 28 16:37 public_html -> /usr/local/www/users/documents
documents@frank-desktop:~$ exit		# (exit the shell back to where you were)
exit
frank@frank-desktop:~$ 
frank@frank-desktop:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,frank
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:ac0xl
fax:x:21:
voice:x:22:
cdrom:x:24:frank,ac0xl
floppy:x:25:ac0xl
tape:x:26:
sudo:x:27:frank
audio:x:29:pulse,ac0xl
dip:x:30:frank
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:ac0xl
sasl:x:45:
plugdev:x:46:frank,ac0xl
staff:x:50:
games:x:60:
users:x:100:ac0xl
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
systemd-timesync:x:104:
crontab:x:105:
messagebus:x:106:
input:x:107:
kvm:x:108:
render:x:109:
syslog:x:110:
tss:x:111:
bluetooth:x:112:
ssl-cert:x:113:
uuidd:x:114:
tcpdump:x:115:
ssh:x:116:
avahi-autoipd:x:117:
rdma:x:118:
rtkit:x:119:
netdev:x:120:
avahi:x:121:
lpadmin:x:122:frank
nm-openvpn:x:123:
whoopsie:x:124:
sssd:x:125:
scanner:x:126:saned
saned:x:127:
colord:x:128:
geoclue:x:129:
pulse:x:130:
pulse-access:x:131:
gdm:x:132:
lxd:x:133:frank
systemd-coredump:x:999:
frank:x:1000:
sambashare:x:134:frank
www:x:135:frank,ac0xl
ac0xl:x:1001:
frank@frank-desktop:~$ 

frank@frank-desktop:~$ 
frank@frank-desktop:~$ ls -al /usr/local/www/users
total 16
drwxrwxr-x 4 root      www   4096 May 28 16:37 .
drwxr-xr-x 5 root      www   4096 May 26 14:18 ..
drwxr-xr-x 2 ac0xl     ac0xl 4096 May 27 16:18 ac0xl
drwxr-xr-x 2 documents www   4096 May 28 16:37 documents
frank@frank-desktop:~$ 
frank@frank-desktop:~$ 

	From all of this we can see "documents" is owned by "documents" and is in group "www", but does not show in the "www:x:135:" group.

		From adduser "Adding new user `documents' (1002) with group `www' ..." .
	We also do not see user (1002) listed in "/etc/group". This is all OK.

*********

	I liked the "anvil_thttpd.gif" on the Acme.com website and chose it as my favicon.ico by renaming a copy to favicon.ico. An "anvil" is built to be hammered on without failing, and "thttpd" is built to take a hammering without failing. It is bullet proof! When you look at your logs you will see how "thttpd" will block all sorts of attempts to break your website! You will also get an idea of things to avoid on your website.

frank@frank-desktop:~$ 
frank@frank-desktop:~$ cd /usr/local/sbin
frank@frank-desktop:/usr/local/sbin$ ls -al
total 172
drwxr-xr-x  2 root root   4096 May 27 15:39 .
drwxr-xr-x 11 root root   4096 May 26 14:11 ..
-rwxr-xr-x  1 root root  19048 May 27 15:39 htpasswd
-rwxr-sr-x  1 root www   14184 May 27 15:39 makeweb
-r-xr-xr-x  1 root root   2878 May 27 15:39 syslogtocern
-r-xr-xr-x  1 bin  bin  124560 May 27 15:39 thttpd
frank@frank-desktop:/usr/local/sbin$ 
frank@frank-desktop:/usr/local/sbin$ cd ~/freedom   # (The directory "freedom" should be in "/home/(frank)/").
frank@frank-desktop:~/freedom$ 
frank@frank-desktop:~/freedom$ ls -al
total 308
drwxr-xr-x  3 frank frank  4096 May 28 17:09 .
drwxr-x--- 21 frank frank  4096 May 27 13:04 ..
-rw-r--r--  1 frank frank 32014 Jan  8  2020 2010Website.pdf
-rw-r--r--  1 frank frank 11024 Jan  8  2020 2019-09-05-Project.txt
-rw-r--r--  1 frank frank 11941 Jan  8  2020 2019-10-01-website.txt
-rw-r--r--  1 frank frank  6365 Jan  8  2020 2019-11-26-web-server.txt
-rw-r--r--  1 frank frank 21340 Jan  8  2020 2019-12-06-Google-Search-Is-Broken.txt
-rw-r--r--  1 frank frank 77314 May 28 17:09 2019-12-26-Installing-thttpd.txt
-rw-r--r--  1 frank frank 12787 Mar 18 19:17 2020-07-17-thttpd.txt
-rw-rw-r--  1 frank frank 64700 May 28 17:02 2021-05-14-Install-thttpd-Pi-400-ubuntu-21.04-desktop-arm64+raspi.txt
-rw-r--r--  1 frank frank 32787 Mar 18 19:18 readme.txt
-rw-r--r--  1 frank frank   186 Jan  8  2020 sitemap.xml
-rw-r--r--  1 frank frank   186 Jan  8  2020 sitemap.xml.txt
-rw-r--r--  1 frank frank   456 Jan  8  2020 thttpd_config
-rw-r--r--  1 frank frank   456 Jan  8  2020 thttpd_config~
drwxr-xr-x  2 frank frank  4096 Jan  8  2020 thttpd-extras
frank@frank-desktop:~/freedom$ 
frank@frank-desktop:~/freedom$ sudo cp -rv thttpd-extras /usr/local/sbin/
[sudo] password for frank: 
'thttpd-extras' -> '/usr/local/sbin/thttpd-extras'
'thttpd-extras/thttpd.sh' -> '/usr/local/sbin/thttpd-extras/thttpd.sh'
'thttpd-extras/thttpd_wrapper' -> '/usr/local/sbin/thttpd-extras/thttpd_wrapper'
'thttpd-extras/thttpd-rotate' -> '/usr/local/sbin/thttpd-extras/thttpd-rotate'
'thttpd-extras/readme.txt' -> '/usr/local/sbin/thttpd-extras/readme.txt'
'thttpd-extras/robots.txt' -> '/usr/local/sbin/thttpd-extras/robots.txt'
'thttpd-extras/thttpd_config~' -> '/usr/local/sbin/thttpd-extras/thttpd_config~'
'thttpd-extras/anvil_thttpd.gif' -> '/usr/local/sbin/thttpd-extras/anvil_thttpd.gif'
'thttpd-extras/favicon.ico' -> '/usr/local/sbin/thttpd-extras/favicon.ico'
'thttpd-extras/thttpd_config' -> '/usr/local/sbin/thttpd-extras/thttpd_config'
'thttpd-extras/rc.local' -> '/usr/local/sbin/thttpd-extras/rc.local'
'thttpd-extras/sitemap.xml' -> '/usr/local/sbin/thttpd-extras/sitemap.xml'
'thttpd-extras/robots-site.txt' -> '/usr/local/sbin/thttpd-extras/robots-site.txt'
'thttpd-extras/sitemap.xml.txt' -> '/usr/local/sbin/thttpd-extras/sitemap.xml.txt'
frank@frank-desktop:~/freedom$ 

frank@frank-desktop:~/freedom$ 
frank@frank-desktop:~/freedom$ sudo cp -rv os-debug /usr/local/sbin/
'os-debug' -> '/usr/local/sbin/os-debug'
'os-debug/thttpd-rotate' -> '/usr/local/sbin/os-debug/thttpd-rotate'
'os-debug/thttpd_wrapper' -> '/usr/local/sbin/os-debug/thttpd_wrapper'
'os-debug/dead-thttpd' -> '/usr/local/sbin/os-debug/dead-thttpd'
'os-debug/datelog' -> '/usr/local/sbin/os-debug/datelog'
frank@frank-desktop:~/freedom$ 


frank@frank-desktop:~/freedom$ 
frank@frank-desktop:~/freedom$ cd /usr/local/sbin/thttpd-extras
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -al
total 60
drwxr-xr-x 2 root root 4096 May 28 17:11 .
drwxr-xr-x 3 root root 4096 May 28 17:11 ..
-rw-r--r-- 1 root root  533 May 28 17:11 anvil_thttpd.gif
-rw-r--r-- 1 root root  533 May 28 17:11 favicon.ico
-rw-r--r-- 1 root root  485 May 28 17:11 rc.local
-rw-r--r-- 1 root root  247 May 28 17:11 readme.txt
-rw-r--r-- 1 root root   73 May 28 17:11 robots-site.txt
-rw-r--r-- 1 root root   27 May 28 17:11 robots.txt
-rw-r--r-- 1 root root  186 May 28 17:11 sitemap.xml
-rw-r--r-- 1 root root  186 May 28 17:11 sitemap.xml.txt
-rw-r--r-- 1 root root  456 May 28 17:11 thttpd_config
-rw-r--r-- 1 root root  456 May 28 17:11 thttpd_config~
-rw-r--r-- 1 root root 1745 May 28 17:11 thttpd-rotate
-rw-r--r-- 1 root root  136 May 28 17:11 thttpd.sh
-rw-r--r-- 1 root root  120 May 28 17:11 thttpd_wrapper
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

	The files: rc.local, and thttpd* files are all program files that have to execute so we need to change their privileges to "0755", the other files are data files and are "0644".

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$  sudo chmod -v 0755 rc.local
mode of 'rc.local' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo chmod -v 0755 thttpd*
mode of 'thttpd_config' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of 'thttpd_config~' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of 'thttpd-rotate' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of 'thttpd.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of 'thttpd_wrapper' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -al
total 60
drwxr-xr-x 2 root root 4096 May 28 17:11 .
drwxr-xr-x 3 root root 4096 May 28 17:11 ..
-rw-r--r-- 1 root root  533 May 28 17:11 anvil_thttpd.gif
-rw-r--r-- 1 root root  533 May 28 17:11 favicon.ico
-rwxr-xr-x 1 root root  485 May 28 17:11 rc.local
-rw-r--r-- 1 root root  247 May 28 17:11 readme.txt
-rw-r--r-- 1 root root   73 May 28 17:11 robots-site.txt
-rw-r--r-- 1 root root   27 May 28 17:11 robots.txt
-rw-r--r-- 1 root root  186 May 28 17:11 sitemap.xml
-rw-r--r-- 1 root root  186 May 28 17:11 sitemap.xml.txt
-rwxr-xr-x 1 root root  456 May 28 17:11 thttpd_config
-rwxr-xr-x 1 root root  456 May 28 17:11 thttpd_config~
-rwxr-xr-x 1 root root 1745 May 28 17:11 thttpd-rotate
-rwxr-xr-x 1 root root  136 May 28 17:11 thttpd.sh
-rwxr-xr-x 1 root root  120 May 28 17:11 thttpd_wrapper
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat /etc/rc.local
cat: /etc/rc.local: No such file or directory

	rc.local is a file that is part of "systemd" which is in "/etc".

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# Start thttpd
echo "Starting thttpd. \n" 
   . /etc/thttpd.sh
#
exit 0
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav rc.local /etc/rc.local
'rc.local' -> '/etc/rc.local'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 485 May 28 17:11 /etc/rc.local
	(rc.local is still 0755)
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

	We now need to copy thttpd.sh to /etc and make sure it is 0755.

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav thttpd.sh /etc/
'thttpd.sh' -> '/etc/thttpd.sh'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -l /etc/thttpd.sh
-rwxr-xr-x 1 root root 136 May 28 17:11 /etc/thttpd.sh
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
	(thttpd.sh is still 0755)

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat thttpd.sh
#!/bin/sh
# thttpd.sh

if [ -x /usr/local/sbin/thttpd_wrapper ] ; then
	echo -n " thttpd"
	/usr/local/sbin/thttpd_wrapper &
fi
#
exit 0
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

	thttpd.sh is looking for thttpd_wrapper to be in "/usr/local/sbin/" and being 0755, so we will copy "thttpd_wrapper" up one level to there.

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav thttpd_wrapper ../
'thttpd_wrapper' -> '../thttpd_wrapper'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -l /usr/local/sbin
total 172
-rwxr-xr-x 1 root root  19048 May 27 15:39 htpasswd
-rwxr-sr-x 1 root www   14184 May 27 15:39 makeweb
-r-xr-xr-x 1 root root   2878 May 27 15:39 syslogtocern
-r-xr-xr-x 1 bin  bin  124560 May 27 15:39 thttpd
drwxr-xr-x 2 root root   4096 May 28 17:11 thttpd-extras
-rwxr-xr-x 1 root root    120 May 28 17:11 thttpd_wrapper
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
	(thttpd_wrapper is still 0755)
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

	The purpose of this file is to restart "thttpd" if it stops and it checks every 10 seconds to see if "/usr/local/sbin/thttpd" is running and it also loads the configuration file that is "/usr/local/www/thttpd_config". If one changes the config file, one only has to kill the "thttpd pid number" and the wrapper will restart it in 10 seconds with the new configuration. "sudo kill xxxx" will kill a program. To get all of the running "pid" numbers use "ps -e". If you forget to use "sudo" to manually start "thttpd" or even "rc.local" every 10 seconds you will get a message that "/usr/local/www/logs/thttpd_log" can not be written to! (because it is now owned by nobody). What appears on your screen is not what you type in, but both the error message and what you type in. Type in "ps -e" and look for the number for "thttpd_wrapper" and then type in "sudo kill xxxx" with "xxxx" being the "pid" number. Been there, done that way too many times!

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat thttpd_wrapper
#!/bin/sh
# thttpd_wrapper

while true ; do
	/usr/local/sbin/thttpd -D -C /usr/local/www/thttpd_config
	sleep 10
done
#
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

	Next "thttpd-rotate" needs to be moved to "/etc/cron.daily/" so our log files get moved every day. The time they get rotated is in "/etc/crontab"

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
# You can also override PATH, by default, newer versions inherit it from the environment
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 		 Here we see /etc/cron.daily is started at 06:25 in the morning.

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav thttpd-rotate /etc/cron.daily/
'thttpd-rotate' -> '/etc/cron.daily/thttpd-rotate'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -al /etc/cron.daily
total 48
drwxr-xr-x   2 root root 4096 May 28 18:01 .
drwxr-xr-x 133 root root 8192 May 28 17:44 ..
-rwxr-xr-x   1 root root  311 Mar 15 09:58 0anacron
-rwxr-xr-x   1 root root  376 Mar 24 08:58 apport
-rwxr-xr-x   1 root root 1478 Apr 13 09:53 apt-compat
-rwxr-xr-x   1 root root  384 Nov 19  2019 cracklib-runtime
-rwxr-xr-x   1 root root 1298 Jan 29 23:09 dpkg
-rwxr-xr-x   1 root root  377 Feb  9 14:50 logrotate
-rwxr-xr-x   1 root root 1123 Feb 19 03:14 man-db
-rw-r--r--   1 root root  102 Mar 15 08:10 .placeholder
-rwxr-xr-x   1 root root 1745 May 28 17:11 thttpd-rotate
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
	(thttpd_rotate is still 0755)

	The "thttpd_rotate" file I made is for 50 days so you don't have to move them every day, week, or even month. I also put a header and a tail on the files when they rotate so you have an idea how long your website has been up.

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat thttpd-rotate
#!/bin/sh
# /etc/cron.daily/thttpd-rotate

cd /usr/local/www/logs
rm -f thttpd_log.50

mv thttpd_log.49 thttpd_log.50
mv thttpd_log.48 thttpd_log.49
mv thttpd_log.47 thttpd_log.48
mv thttpd_log.46 thttpd_log.47
mv thttpd_log.45 thttpd_log.46
mv thttpd_log.44 thttpd_log.45
mv thttpd_log.43 thttpd_log.44
mv thttpd_log.42 thttpd_log.43
mv thttpd_log.41 thttpd_log.42
mv thttpd_log.40 thttpd_log.41
mv thttpd_log.39 thttpd_log.40
mv thttpd_log.38 thttpd_log.39
mv thttpd_log.37 thttpd_log.38
mv thttpd_log.36 thttpd_log.37
mv thttpd_log.35 thttpd_log.36
mv thttpd_log.34 thttpd_log.35
mv thttpd_log.33 thttpd_log.34
mv thttpd_log.32 thttpd_log.33
mv thttpd_log.31 thttpd_log.32
mv thttpd_log.30 thttpd_log.31
mv thttpd_log.29 thttpd_log.30
mv thttpd_log.28 thttpd_log.29
mv thttpd_log.27 thttpd_log.28
mv thttpd_log.26 thttpd_log.27
mv thttpd_log.25 thttpd_log.26
mv thttpd_log.24 thttpd_log.25
mv thttpd_log.23 thttpd_log.24
mv thttpd_log.22 thttpd_log.23
mv thttpd_log.21 thttpd_log.22
mv thttpd_log.20 thttpd_log.21
mv thttpd_log.19 thttpd_log.20
mv thttpd_log.18 thttpd_log.19
mv thttpd_log.17 thttpd_log.18
mv thttpd_log.16 thttpd_log.17
mv thttpd_log.15 thttpd_log.16
mv thttpd_log.14 thttpd_log.15
mv thttpd_log.13 thttpd_log.14
mv thttpd_log.12 thttpd_log.13
mv thttpd_log.11 thttpd_log.12
mv thttpd_log.10 thttpd_log.11
mv thttpd_log.09 thttpd_log.10
mv thttpd_log.08 thttpd_log.09
mv thttpd_log.07 thttpd_log.08
mv thttpd_log.06 thttpd_log.07
mv thttpd_log.05 thttpd_log.06
mv thttpd_log.04 thttpd_log.05
mv thttpd_log.03 thttpd_log.04
mv thttpd_log.02 thttpd_log.03
mv thttpd_log.01 thttpd_log.02

date >> thttpd_log
w >> thttpd_log

mv thttpd_log thttpd_log.01

date > thttpd_log
w >> thttpd_log
kill -usr1 `cat /var/run/thttpd.pid`
#
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

*********

	To copy the log files to dates, I "cd /usr/local/www/logs/" and then type ls -al to get a listing of the files and the dates for the files. Then to copy the files: "sudo cp -iv *log.xx 2020.01.01" with xx being the log number and then year.mo.da and then check that I have everything right before I press the enter key. Since the log files belong to nobody and nogroup one has to use "sudo" and "cp -iv" so root can then change the owner to something else.
	Example:
		sudo cp -iv *log.xx year.mo.da		# (one can use ? to replace one character, or * to replace the rest of the string for all matching files).
		ls -al
		sudo chown -v ac0xl:www year.mo.da	# the owner:group changes from root:root to ac0xl:www
		ls -al
		su ac0xl
		cd 
		cd logs/
		ls
		cp -iv /usr/local/www/logs/year.mo.da . 	# which will copy the files into the log file.
		ls -al
		cp -iv /usr/local/www/logs/year.mo.da ../public*/logs/		# to put the log files live on the www. They will be under "ac0xl/logs/".

	I posted the logs to my site just so one could see what to expect from activity on the Internet and how "thttpd" handles those interactions.

	The last files to copy will be the "thttpd_config" files which go to "/usr/local/www/".

*******

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav thttpd_config* /usr/local/www/
'thttpd_config' -> '/usr/local/www/thttpd_config'
'thttpd_config~' -> '/usr/local/www/thttpd_config~'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -al /usr/local/www/
total 28
drwxr-xr-x  5 root www  4096 May 28 18:10 .
drwxr-xr-x 11 root root 4096 May 26 14:11 ..
drwxr-xr-x  2 root www  4096 May 27 15:39 cgi-bin
drwxr-xr-x  2 root www  4096 May 26 14:18 logs
-rwxr-xr-x  1 root root  456 May 28 17:11 thttpd_config
-rwxr-xr-x  1 root root  456 May 28 17:11 thttpd_config~
drwxrwxr-x  4 root www  4096 May 28 16:37 users
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat thttpd_config
# /usr/local/www/thttpd_config

dir=/usr/local/www
chroot		#chroot jail

data_dir=users

#vhost    # if you use a domain name you will have to uncomment (remove the # at the beginning) and then make a "user" directory using your external IPv4 address (xxx.xxx.xxx.xxx) and inside this directory make symbolic links back up to your other files in "users" (../"user-name").

cgipat=**.cgi
logfile=/usr/local/www/logs/thttpd_log
pidfile=/var/run/thttpd.pid
#
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cd
frank@frank-desktop:~$ 

	TESTING:

	We need the line from thttpd_wrapper without the wrapper.

frank@frank-desktop:/usr/local/sbin$ 
frank@frank-desktop:/usr/local/sbin$ cat thttpd_wrapper
#!/bin/sh
# thttpd_wrapper

while true ; do
	/usr/local/sbin/thttpd -D -C /usr/local/www/thttpd_config
	sleep 10
done
#
frank@frank-desktop:/usr/local/sbin$ 
frank@frank-desktop:/usr/local/sbin$ 
frank@frank-desktop:/usr/local/sbin$ cd
frank@frank-desktop:~$ 
frank@frank-desktop:~$ 
frank@frank-desktop:~$ sudo /usr/local/sbin/thttpd -D -C /usr/local/www/thttpd_config

	At this point the terminal is still in use by thttpd. Opening a new terminal we see the pid number is: 11330.
frank@frank-desktop:~$ ps -e
    PID TTY          TIME CMD
      1 ?        00:00:14 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      8 ?        00:00:00 mm_percpu_wq
      9 ?        00:00:00 rcu_tasks_kthre
     10 ?        00:00:00 rcu_tasks_rude_
     11 ?        00:00:00 rcu_tasks_trace
     12 ?        00:00:02 ksoftirqd/0
     13 ?        00:00:13 rcu_preempt
     14 ?        00:00:00 migration/0
     15 ?        00:00:00 idle_inject/0
     17 ?        00:00:00 cpuhp/0
     18 ?        00:00:00 cpuhp/1
     19 ?        00:00:00 idle_inject/1
     20 ?        00:00:00 migration/1
     21 ?        00:00:01 ksoftirqd/1
     24 ?        00:00:00 cpuhp/2
     25 ?        00:00:00 idle_inject/2
     26 ?        00:00:00 migration/2
     27 ?        00:00:01 ksoftirqd/2
     30 ?        00:00:00 cpuhp/3
     31 ?        00:00:00 idle_inject/3
     32 ?        00:00:00 migration/3
     33 ?        00:00:01 ksoftirqd/3
     36 ?        00:00:00 kdevtmpfs
     37 ?        00:00:00 netns
     38 ?        00:00:00 inet_frag_wq
     39 ?        00:00:00 kauditd
     40 ?        00:00:00 khungtaskd
     41 ?        00:00:00 oom_reaper
     42 ?        00:00:00 writeback
     43 ?        00:00:00 kcompactd0
     44 ?        00:00:00 ksmd
     45 ?        00:00:00 khugepaged
     94 ?        00:00:00 kintegrityd
     95 ?        00:00:00 kblockd
     96 ?        00:00:00 blkcg_punt_bio
     97 ?        00:00:00 tpm_dev_wq
     98 ?        00:00:00 ata_sff
     99 ?        00:00:00 md
    100 ?        00:00:00 edac-poller
    101 ?        00:00:00 devfreq_wq
    103 ?        00:00:00 watchdogd
    105 ?        00:00:01 kworker/3:1H-kblockd
    106 ?        00:00:00 kswapd0
    107 ?        00:00:00 ecryptfs-kthrea
    109 ?        00:00:00 kthrotld
    110 ?        00:00:00 irq/69-aerdrv
    111 ?        00:00:00 nvme-wq
    112 ?        00:00:00 nvme-reset-wq
    113 ?        00:00:00 nvme-delete-wq
    115 ?        00:00:00 DWC Notificatio
    118 ?        00:00:00 vchiq-slot/0
    119 ?        00:00:00 vchiq-recy/0
    120 ?        00:00:00 vchiq-sync/0
    121 ?        00:00:01 kworker/1:1H-kblockd
    122 ?        00:00:00 ipv6_addrconf
    132 ?        00:00:00 kstrp
    135 ?        00:00:00 zswap-shrink
    136 ?        00:00:00 kworker/u9:0-hci0
    142 ?        00:00:00 spi0
    143 ?        00:00:00 sdhci
    144 ?        00:00:00 irq/55-mmc0
    145 ?        00:00:00 charger_manager
    167 ?        00:00:00 mmc_complete
    170 ?        00:00:01 kworker/0:1H-mmc_complete
    171 ?        00:00:01 kworker/2:1H-kblockd
    255 ?        00:00:01 jbd2/mmcblk0p2-
    256 ?        00:00:00 ext4-rsv-conver
    312 ?        00:00:02 systemd-journal
    353 ?        00:00:00 loop0
    354 ?        00:00:00 loop1
    355 ?        00:00:00 loop2
    356 ?        00:00:00 loop3
    358 ?        00:00:01 systemd-udevd
    359 ?        00:00:00 loop4
    402 ?        00:00:00 vchiq-keep/0
    403 ?        00:00:00 SMIO
    411 ?        00:00:13 v3d_bin
    412 ?        00:00:16 v3d_render
    413 ?        00:00:00 v3d_tfu
    414 ?        00:00:00 v3d_csd
    415 ?        00:00:00 v3d_cache_clean
    423 ?        00:00:00 mmal-vchiq
    426 ?        00:00:00 mmal-vchiq
    427 ?        00:00:00 mmal-vchiq
    428 ?        00:00:00 mmal-vchiq
    440 ?        00:00:00 cfg80211
    447 ?        00:00:00 brcmf_wq/mmc1:0
    448 ?        00:00:01 brcmf_wdog/mmc1
    451 ?        00:00:00 cec-vc4
    452 ?        00:00:00 irq/43-vc4 hdmi
    453 ?        00:00:00 irq/42-vc4 hdmi
    455 ?        00:00:00 cec-vc4
    456 ?        00:00:00 irq/49-vc4 hdmi
    457 ?        00:00:00 irq/48-vc4 hdmi
    458 ?        00:00:00 card1-crtc0
    459 ?        00:00:00 card1-crtc1
    460 ?        00:00:00 card1-crtc2
    461 ?        00:00:00 card1-crtc3
    462 ?        00:00:00 card1-crtc4
    463 ?        00:00:00 card1-crtc5
    620 ?        00:00:03 systemd-resolve
    622 ?        00:00:00 systemd-timesyn
    652 ?        00:00:00 avahi-daemon
    653 ?        00:00:08 dbus-daemon
    655 ?        00:00:21 NetworkManager
    666 ?        00:00:06 irqbalance
    667 ?        00:00:00 networkd-dispat
    668 ?        00:00:02 polkitd
    669 ?        00:00:00 power-profiles-
    672 ?        00:00:00 rsyslogd
    683 ?        00:00:01 accounts-daemon
    685 ?        00:00:00 cron
    686 ?        00:00:00 switcheroo-cont
    687 ?        00:00:01 systemd-logind
    691 ?        00:00:03 udisksd
    692 ?        00:00:01 wpa_supplicant
    699 ?        00:00:00 avahi-daemon
    772 ?        00:00:00 cupsd
    776 ?        00:00:00 unattended-upgr
    777 ?        00:00:00 ModemManager
    797 ?        00:00:00 gdm3
    811 ?        00:00:00 gdm-session-wor
    829 ?        00:00:00 cups-browsed
    877 ?        00:00:03 systemd
    878 ?        00:00:00 (sd-pam)
    887 ?        00:00:00 kworker/u9:1-hci0
    888 ?        00:00:00 hciattach
    896 ?        00:00:00 bluetoothd
    910 ?        00:00:00 pipewire
    911 ?        00:00:00 pipewire-media-
    912 ?        00:13:24 pulseaudio
    915 ?        00:00:00 tracker-miner-f
    921 ?        00:00:00 gnome-keyring-d
    926 ?        00:00:00 rtkit-daemon
    928 tty2     00:00:00 gdm-wayland-ses
    932 ?        00:00:03 dbus-daemon
    938 tty2     00:00:00 gnome-session-b
    948 ?        00:00:00 gvfsd
    981 ?        00:00:00 gvfsd-fuse
    990 ?        00:00:00 gvfs-udisks2-vo
   1003 ?        00:00:00 krfcommd
   1006 ?        00:00:00 gvfs-goa-volume
   1010 ?        00:00:00 goa-daemon
   1018 ?        00:00:00 gnome-session-c
   1027 ?        00:00:00 gnome-session-b
   1037 ?        00:00:00 goa-identity-se
   1046 ?        00:00:00 gvfs-gphoto2-vo
   1058 ?        00:00:00 at-spi-bus-laun
   1063 ?        00:00:00 gvfs-mtp-volume
   1070 ?        00:16:58 gnome-shell
   1071 ?        00:00:00 dbus-daemon
   1077 ?        00:00:01 gvfs-afc-volume
   1082 ?        00:00:00 upowerd
   1123 ?        00:00:00 whoopsie
   1124 ?        00:00:00 kerneloops
   1126 ?        00:00:00 kerneloops
   1148 ?        00:00:03 Xwayland
   1168 ?        00:00:00 xdg-permission-
   1173 ?        00:00:00 gnome-shell-cal
   1179 ?        00:00:00 evolution-sourc
   1184 ?        00:00:02 geoclue
   1187 ?        00:00:00 evolution-calen
   1193 ?        00:00:00 packagekitd
   1204 ?        00:00:00 dconf-service
   1206 ?        00:00:00 evolution-addre
   1211 ?        00:00:00 gvfsd-metadata
   1229 ?        00:00:00 gjs
   1230 ?        00:00:00 at-spi2-registr
   1242 ?        00:00:00 gvfsd-trash
   1253 ?        00:00:00 gsd-a11y-settin
   1255 ?        00:00:00 gsd-color
   1256 ?        00:00:00 gsd-datetime
   1257 ?        00:00:01 gsd-housekeepin
   1258 ?        00:00:00 gsd-keyboard
   1263 ?        00:00:00 gsd-media-keys
   1269 ?        00:00:00 gsd-power
   1271 ?        00:00:00 gsd-print-notif
   1272 ?        00:00:00 gsd-rfkill
   1274 ?        00:00:00 gsd-screensaver
   1278 ?        00:00:01 gsd-sharing
   1281 ?        00:00:00 gsd-smartcard
   1289 ?        00:00:00 gsd-sound
   1291 ?        00:00:00 gsd-wacom
   1316 ?        00:00:00 gsd-disk-utilit
   1322 ?        00:00:01 evolution-alarm
   1360 ?        00:00:00 gsd-printer
   1397 ?        00:00:00 colord
   1439 ?        00:00:50 ibus-daemon
   1440 ?        00:00:01 gsd-xsettings
   1445 ?        00:00:00 ibus-memconf
   1446 ?        00:00:16 ibus-extension-
   1449 ?        00:00:00 ibus-x11
   1452 ?        00:00:00 ibus-portal
   1471 ?        00:00:12 ibus-engine-sim
   1475 ?        00:00:02 gjs
   1543 ?        00:01:38 gnome-terminal-
   1548 pts/0    00:00:00 bash
   1558 ?        00:00:01 update-notifier
   1680 ?        00:00:00 loop5
   1708 ?        00:00:00 gvfsd-network
   1714 ?        00:00:00 gvfsd-smb-brows
   1721 ?        00:00:00 gvfsd-dnssd
   1826 ?        00:00:00 loop6
   1842 ?        00:00:55 snapd
   2049 ?        00:00:00 loop7
   2289 ?        00:00:00 scsi_eh_0
   2290 ?        00:00:00 scsi_tmf_0
   2291 ?        00:00:05 usb-storage
   2293 ?        00:00:00 uas
   2575 ?        00:00:00 loop8
   2595 ?        00:00:00 jbd2/sdc2-8
   2596 ?        00:00:00 ext4-rsv-conver
   2650 ?        00:05:08 gedit
   3259 ?        00:00:30 nautilus
   9682 ?        00:00:02 kworker/3:0-events
  10157 ?        00:01:28 gnome-control-c
  10219 ?        00:00:02 kworker/1:0-events
  10248 ?        00:00:02 kworker/u8:4-ext4-rsv-conversion
  10457 ?        00:00:02 kworker/2:2-events
  10473 ?        00:00:46 firefox
  10533 ?        00:00:09 Web Content
  10574 ?        00:00:03 WebExtensions
  10630 ?        00:00:01 Web Content
  10663 ?        00:00:01 kworker/u8:1-events_unbound
  10678 pts/1    00:00:00 bash
  10696 ?        00:00:01 kworker/0:3-events
  11237 ?        00:00:00 kworker/3:2-mm_percpu_wq
  11242 ?        00:00:00 kworker/2:1-cgroup_destroy
  11251 ?        00:00:00 kworker/u8:2-events_power_efficient
  11262 pts/2    00:00:00 bash
  11285 ?        00:00:00 kworker/3:1-events_freezable
  11287 ?        00:00:00 kworker/1:2H
  11288 ?        00:00:00 kworker/0:1-events
  11292 ?        00:00:00 kworker/1:1-events
  11293 ?        00:00:00 kworker/2:0-mm_percpu_wq
  11294 ?        00:00:00 kworker/0:0H
  11298 ?        00:00:00 kworker/3:2H
  11321 ?        00:00:00 kworker/u8:0-events_unbound
  11329 pts/0    00:00:00 sudo
  11330 ?        00:00:03 thttpd
  11331 ?        00:00:00 kworker/2:0H-kblockd
  11345 ?        00:00:00 kworker/1:0H
  11346 ?        00:00:00 kworker/0:0-events
  11352 ?        00:00:00 kworker/2:3
  11353 ?        00:00:00 kworker/2:4-events
  11354 ?        00:00:00 kworker/1:2-events
  11362 ?        00:00:00 kworker/3:3-events
  11387 ?        00:00:00 kworker/0:2-events
  11424 ?        00:00:00 kworker/0:2H
  11720 ?        00:00:00 kworker/3:0H
  11761 ?        00:00:00 kworker/2:2H
  11775 pts/3    00:00:00 bash
  11782 pts/3    00:00:00 ps
frank@frank-desktop:~$ 

	Typing “localhost” on the browser, we get:

Index of /

mode  links    bytes  last-changed  name
dr-x   4        4096  Jun 14 23:06  ./
dr-x   5        4096  Jun 14 23:36  ../
dr-x   2        4096  Jun 14 23:00  ac0xl/
dr-x   2        4096  Jun 14 23:06  documents/

	In a new terminal, type: "cd /usr/local/www/logs"

frank@frank-desktop:~$ 
frank@frank-desktop:~$ cd /usr/local/www/logs
frank@frank-desktop:/usr/local/www/logs$ ls -al
total 12
drwxr-xr-x 2 root   www     4096 Jun 14 18:14 .
drwxr-xr-x 5 root   www     4096 Jun 14 17:36 ..
-rw-r--r-- 1 nobody nogroup  227 Jun 14 18:26 thttpd_log
frank@frank-desktop:/usr/local/www/logs$ cat *log
127.0.0.1 - - [15/Jun/2021:00:17:39 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
127.0.0.1 - - [15/Jun/2021:00:26:54 +0000] "UNKNOWN  UNKNOWN" 400 0 "" ""
frank@frank-desktop:/usr/local/www/logs$ 

	The program thttpd is working OK. so we can kill its pid (11330).cd -
frank@frank-desktop:/usr/local/www/logs$ 
frank@frank-desktop:/usr/local/www/logs$ sudo kill 11330
[sudo] password for frank: 
frank@frank-desktop:/usr/local/www/logs$ 

	This freed up the terminal that was running thttpd.	

	On the busy terminal, Control C an Control X won't stop the program. The only way to stop it is by going to a different terminal and find "thttpd" in "ps -e" then "sudo kill (program number), in this case it was 11330.

	Now we need to add the files to "users" that are in "/usr/local/sbin/thttpd-extras".

cd /usr/local/sbin/thttpd-extras/
frank@frank-desktop:~$ cd /usr/local/sbin/thttpd-extras/
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ ls -al
total 60
drwxr-xr-x 2 root root 4096 Jun 14 17:14 .
drwxr-xr-x 4 root root 4096 Jun 14 18:04 ..
-rw-r--r-- 1 root root  533 Jun 14 17:14 anvil_thttpd.gif
-rw-r--r-- 1 root root  533 Jun 14 17:14 favicon.ico
-rwxr-xr-x 1 root root  485 Jun 14 17:14 rc.local
-rw-r--r-- 1 root root  247 Jun 14 17:14 readme.txt
-rw-r--r-- 1 root root   73 Jun 14 17:14 robots-site.txt
-rw-r--r-- 1 root root   27 Jun 14 17:14 robots.txt
-rw-r--r-- 1 root root  186 Jun 14 17:14 sitemap.xml
-rw-r--r-- 1 root root  186 Jun 14 17:14 sitemap.xml.txt
-rwxr-xr-x 1 root root  456 Jun 14 17:14 thttpd_config
-rwxr-xr-x 1 root root  456 Jun 14 17:14 thttpd_config~
-rwxr-xr-x 1 root root 1745 Jun 14 17:14 thttpd-rotate
-rwxr-xr-x 1 root root  136 Jun 14 17:14 thttpd.sh
-rwxr-xr-x 1 root root  120 Jun 14 17:14 thttpd_wrapper
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
	(Since these files are owned by root you will need to use sudo to copy them.)

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav favicon.ico /usr/local/www/users/
[sudo] password for frank: 
'favicon.ico' -> '/usr/local/www/users/favicon.ico'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav readme.txt /usr/local/www/users/
'readme.txt' -> '/usr/local/www/users/readme.txt'
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ sudo cp -iav robots.txt /usr/local/www/users/
'robots.txt' -> '/usr/local/www/users/robots.txt'

***********

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat robots-site.txt
User-agent: *
Disallow: 
Sitemap: http://xxx.xxx.xxx.xxx/sitemap.xml/

******

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cat sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

   <url>

      <loc>http://xxx.xxx.xxx.xxx/</loc>

   </url>

</urlset>
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 

*******
	You would use "robots-site.txt" replacing the XXX.xxx.xxx.xxx with your external static IPv4 address and then naming it "robots.txt". Likewise, with the "sitemap.xml" file and keep the same name for it. Adding both of these files to “/usr/local/www/users/”, if you have an external static IP address.

******************

frank@frank-desktop:/usr/local/sbin/thttpd-extras$ 
frank@frank-desktop:/usr/local/sbin/thttpd-extras$ cd /etc

frank@frank-desktop:/etc$ 		# ****If you don't use sudo here it will start looping every 10 seconds. Then you would have to find the pid number for thttpd_wrapper and sudo kill "pid-number" because it is trying to write to root files!!!, or just turn off the computer.****

frank@frank-desktop:/etc$ sudo ./rc.local   # (Starting thttpd from rc.local, REMEMBER the sudo!!!!!!)

My IP address is 192.168.19.13 
Starting thttpd. 

 thttpdfrank@frank-desktop:/etc$ 	(Notice the thttpd in front of frank@frank-desktop:/etc$ on the terminal screen, it is still running.)

	Typing “192.168.19.13” on the browser, we get:

Index of /

mode  links    bytes  last-changed  name
dr-x   4        4096  Jun 15 01:08  ./
dr-x   5        4096  Jun 14 23:36  ../
dr-x   2        4096  Jun 14 23:00  ac0xl/
dr-x   2        4096  Jun 14 23:06  documents/
-r--   1         533  Jun 14 23:14  favicon.ico
-r--   1         247  Jun 14 23:14  readme.txt
-r--   1          27  Jun 14 23:14  robots.txt

 thttpdfrank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ cat /usr/local/www/logs/*log
127.0.0.1 - - [15/Jun/2021:00:17:39 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
127.0.0.1 - - [15/Jun/2021:00:26:54 +0000] "UNKNOWN  UNKNOWN" 400 0 "" ""
192.168.19.13 - - [15/Jun/2021:01:12:52 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
192.168.19.13 - - [15/Jun/2021:01:13:05 +0000] "GET /ac0xl/ HTTP/1.1" 200 25000 "http://192.168.19.13/" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
192.168.19.13 - - [15/Jun/2021:01:13:09 +0000] "GET /documents/ HTTP/1.1" 200 25000 "http://192.168.19.13/" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
192.168.19.13 - - [15/Jun/2021:01:13:13 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.19.13/" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
192.168.19.13 - - [15/Jun/2021:01:13:26 +0000] "GET /readme.txt HTTP/1.1" 200 247 "http://192.168.19.13/" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
192.168.19.13 - - [15/Jun/2021:01:13:26 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.19.13/readme.txt" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
192.168.19.13 - - [15/Jun/2021:01:13:48 +0000] "UNKNOWN  UNKNOWN" 400 0 "" ""
192.168.19.13 - - [15/Jun/2021:01:13:54 +0000] "UNKNOWN  UNKNOWN" 400 0 "" ""
192.168.19.13 - - [15/Jun/2021:01:13:57 +0000] "GET /robots.txt HTTP/1.1" 200 27 "http://192.168.19.13/" "Mozilla/5.0 (X11; Ubuntu; Linux aarch64; rv:89.0) Gecko/20100101 Firefox/89.0"
frank@frank-desktop:/etc$ 

	By clicking on each entry everything works! and now shows up in the log file.

frank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ ps -e
frank@frank-desktop:/etc$ ps -e
    PID TTY          TIME CMD
      1 ?        00:00:15 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      8 ?        00:00:00 mm_percpu_wq
      9 ?        00:00:00 rcu_tasks_kthre
     10 ?        00:00:00 rcu_tasks_rude_
     11 ?        00:00:00 rcu_tasks_trace
     12 ?        00:00:02 ksoftirqd/0
     13 ?        00:00:20 rcu_preempt
     14 ?        00:00:00 migration/0
     15 ?        00:00:00 idle_inject/0
     17 ?        00:00:00 cpuhp/0
     18 ?        00:00:00 cpuhp/1
     19 ?        00:00:00 idle_inject/1
     20 ?        00:00:00 migration/1
     21 ?        00:00:01 ksoftirqd/1
     24 ?        00:00:00 cpuhp/2
     25 ?        00:00:00 idle_inject/2
     26 ?        00:00:00 migration/2
     27 ?        00:00:01 ksoftirqd/2
     30 ?        00:00:00 cpuhp/3
     31 ?        00:00:00 idle_inject/3
     32 ?        00:00:00 migration/3
     33 ?        00:00:01 ksoftirqd/3
     36 ?        00:00:00 kdevtmpfs
     37 ?        00:00:00 netns
     38 ?        00:00:00 inet_frag_wq
     39 ?        00:00:00 kauditd
     40 ?        00:00:00 khungtaskd
     41 ?        00:00:00 oom_reaper
     42 ?        00:00:00 writeback
     43 ?        00:00:01 kcompactd0
     44 ?        00:00:00 ksmd
     45 ?        00:00:00 khugepaged
     94 ?        00:00:00 kintegrityd
     95 ?        00:00:00 kblockd
     96 ?        00:00:00 blkcg_punt_bio
     97 ?        00:00:00 tpm_dev_wq
     98 ?        00:00:00 ata_sff
     99 ?        00:00:00 md
    100 ?        00:00:00 edac-poller
    101 ?        00:00:00 devfreq_wq
    103 ?        00:00:00 watchdogd
    105 ?        00:00:01 kworker/3:1H-kblockd
    106 ?        00:00:00 kswapd0
    107 ?        00:00:00 ecryptfs-kthrea
    109 ?        00:00:00 kthrotld
    110 ?        00:00:00 irq/69-aerdrv
    111 ?        00:00:00 nvme-wq
    112 ?        00:00:00 nvme-reset-wq
    113 ?        00:00:00 nvme-delete-wq
    115 ?        00:00:00 DWC Notificatio
    118 ?        00:00:00 vchiq-slot/0
    119 ?        00:00:00 vchiq-recy/0
    120 ?        00:00:00 vchiq-sync/0
    121 ?        00:00:01 kworker/1:1H-kblockd
    122 ?        00:00:00 ipv6_addrconf
    132 ?        00:00:00 kstrp
    135 ?        00:00:00 zswap-shrink
    136 ?        00:00:00 kworker/u9:0-hci0
    142 ?        00:00:00 spi0
    143 ?        00:00:00 sdhci
    144 ?        00:00:00 irq/55-mmc0
    145 ?        00:00:00 charger_manager
    167 ?        00:00:00 mmc_complete
    170 ?        00:00:02 kworker/0:1H-kblockd
    255 ?        00:00:01 jbd2/mmcblk0p2-
    256 ?        00:00:00 ext4-rsv-conver
    312 ?        00:00:02 systemd-journal
    353 ?        00:00:00 loop0
    354 ?        00:00:00 loop1
    355 ?        00:00:00 loop2
    356 ?        00:00:00 loop3
    358 ?        00:00:01 systemd-udevd
    359 ?        00:00:00 loop4
    402 ?        00:00:00 vchiq-keep/0
    403 ?        00:00:00 SMIO
    411 ?        00:00:25 v3d_bin
    412 ?        00:00:29 v3d_render
    413 ?        00:00:00 v3d_tfu
    414 ?        00:00:00 v3d_csd
    415 ?        00:00:00 v3d_cache_clean
    423 ?        00:00:00 mmal-vchiq
    426 ?        00:00:00 mmal-vchiq
    427 ?        00:00:00 mmal-vchiq
    428 ?        00:00:00 mmal-vchiq
    440 ?        00:00:00 cfg80211
    447 ?        00:00:00 brcmf_wq/mmc1:0
    448 ?        00:00:01 brcmf_wdog/mmc1
    451 ?        00:00:00 cec-vc4
    452 ?        00:00:00 irq/43-vc4 hdmi
    453 ?        00:00:00 irq/42-vc4 hdmi
    455 ?        00:00:00 cec-vc4
    456 ?        00:00:00 irq/49-vc4 hdmi
    457 ?        00:00:00 irq/48-vc4 hdmi
    458 ?        00:00:00 card1-crtc0
    459 ?        00:00:00 card1-crtc1
    460 ?        00:00:00 card1-crtc2
    461 ?        00:00:00 card1-crtc3
    462 ?        00:00:00 card1-crtc4
    463 ?        00:00:00 card1-crtc5
    620 ?        00:00:03 systemd-resolve
    622 ?        00:00:00 systemd-timesyn
    652 ?        00:00:00 avahi-daemon
    653 ?        00:00:12 dbus-daemon
    655 ?        00:00:29 NetworkManager
    666 ?        00:00:07 irqbalance
    667 ?        00:00:00 networkd-dispat
    668 ?        00:00:04 polkitd
    669 ?        00:00:00 power-profiles-
    672 ?        00:00:00 rsyslogd
    683 ?        00:00:01 accounts-daemon
    685 ?        00:00:00 cron
    686 ?        00:00:00 switcheroo-cont
    687 ?        00:00:01 systemd-logind
    691 ?        00:00:03 udisksd
    692 ?        00:00:02 wpa_supplicant
    699 ?        00:00:00 avahi-daemon
    772 ?        00:00:00 cupsd
    776 ?        00:00:00 unattended-upgr
    777 ?        00:00:00 ModemManager
    797 ?        00:00:00 gdm3
    811 ?        00:00:00 gdm-session-wor
    829 ?        00:00:00 cups-browsed
    877 ?        00:00:03 systemd
    878 ?        00:00:00 (sd-pam)
    887 ?        00:00:00 kworker/u9:1-hci0
    888 ?        00:00:00 hciattach
    896 ?        00:00:00 bluetoothd
    910 ?        00:00:00 pipewire
    911 ?        00:00:00 pipewire-media-
    912 ?        00:13:24 pulseaudio
    915 ?        00:00:00 tracker-miner-f
    921 ?        00:00:00 gnome-keyring-d
    926 ?        00:00:00 rtkit-daemon
    928 tty2     00:00:00 gdm-wayland-ses
    932 ?        00:00:03 dbus-daemon
    938 tty2     00:00:00 gnome-session-b
    948 ?        00:00:00 gvfsd
    981 ?        00:00:00 gvfsd-fuse
    990 ?        00:00:00 gvfs-udisks2-vo
   1003 ?        00:00:00 krfcommd
   1006 ?        00:00:00 gvfs-goa-volume
   1010 ?        00:00:00 goa-daemon
   1018 ?        00:00:00 gnome-session-c
   1027 ?        00:00:00 gnome-session-b
   1037 ?        00:00:00 goa-identity-se
   1046 ?        00:00:00 gvfs-gphoto2-vo
   1058 ?        00:00:00 at-spi-bus-laun
   1063 ?        00:00:00 gvfs-mtp-volume
   1070 ?        00:24:45 gnome-shell
   1071 ?        00:00:00 dbus-daemon
   1077 ?        00:00:01 gvfs-afc-volume
   1082 ?        00:00:00 upowerd
   1123 ?        00:00:00 whoopsie
   1124 ?        00:00:00 kerneloops
   1126 ?        00:00:00 kerneloops
   1148 ?        00:00:04 Xwayland
   1168 ?        00:00:00 xdg-permission-
   1173 ?        00:00:00 gnome-shell-cal
   1179 ?        00:00:00 evolution-sourc
   1184 ?        00:00:03 geoclue
   1187 ?        00:00:00 evolution-calen
   1193 ?        00:00:00 packagekitd
   1204 ?        00:00:00 dconf-service
   1206 ?        00:00:00 evolution-addre
   1211 ?        00:00:00 gvfsd-metadata
   1229 ?        00:00:00 gjs
   1230 ?        00:00:00 at-spi2-registr
   1242 ?        00:00:00 gvfsd-trash
   1253 ?        00:00:00 gsd-a11y-settin
   1255 ?        00:00:01 gsd-color
   1256 ?        00:00:00 gsd-datetime
   1257 ?        00:00:01 gsd-housekeepin
   1258 ?        00:00:00 gsd-keyboard
   1263 ?        00:00:00 gsd-media-keys
   1269 ?        00:00:00 gsd-power
   1271 ?        00:00:00 gsd-print-notif
   1272 ?        00:00:00 gsd-rfkill
   1274 ?        00:00:00 gsd-screensaver
   1278 ?        00:00:02 gsd-sharing
   1281 ?        00:00:00 gsd-smartcard
   1289 ?        00:00:00 gsd-sound
   1291 ?        00:00:00 gsd-wacom
   1316 ?        00:00:00 gsd-disk-utilit
   1322 ?        00:00:01 evolution-alarm
   1360 ?        00:00:00 gsd-printer
   1397 ?        00:00:00 colord
   1439 ?        00:01:10 ibus-daemon
   1440 ?        00:00:01 gsd-xsettings
   1445 ?        00:00:00 ibus-memconf
   1446 ?        00:00:21 ibus-extension-
   1449 ?        00:00:00 ibus-x11
   1452 ?        00:00:00 ibus-portal
   1471 ?        00:00:17 ibus-engine-sim
   1475 ?        00:00:03 gjs
   1543 ?        00:02:10 gnome-terminal-
   1548 pts/0    00:00:00 bash
   1558 ?        00:00:01 update-notifier
   1680 ?        00:00:00 loop5
   1708 ?        00:00:00 gvfsd-network
   1714 ?        00:00:00 gvfsd-smb-brows
   1721 ?        00:00:00 gvfsd-dnssd
   1826 ?        00:00:00 loop6
   1842 ?        00:00:55 snapd
   2049 ?        00:00:00 loop7
   2289 ?        00:00:00 scsi_eh_0
   2290 ?        00:00:00 scsi_tmf_0
   2291 ?        00:00:07 usb-storage
   2293 ?        00:00:00 uas
   2575 ?        00:00:00 loop8
   2595 ?        00:00:00 jbd2/sdc2-8
   2596 ?        00:00:00 ext4-rsv-conver
   2650 ?        00:07:15 gedit
   3259 ?        00:00:33 nautilus
  10157 ?        00:03:51 gnome-control-c
  10678 pts/1    00:00:00 bash
  11262 pts/2    00:00:00 bash
  11321 ?        00:00:05 kworker/u8:0-events_power_efficient
  11775 pts/3    00:00:00 bash
  11919 pts/4    00:00:00 bash
  11958 ?        00:00:01 kworker/3:2-events
  12019 ?        00:00:00 kworker/2:0H-kblockd
  12067 ?        00:00:02 kworker/u8:3-events_unbound
  12086 ?        00:00:01 kworker/u8:2+events_unbound
  12089 ?        00:00:01 kworker/3:1-events
  12093 ?        00:00:02 kworker/2:1-events
  12132 pts/0    00:00:00 thttpd_wrapper
  12133 ?        00:00:08 thttpd
  12134 ?        00:00:00 kworker/0:1-events
  12140 ?        00:00:00 kworker/3:2H
  12144 ?        00:00:00 kworker/1:0H
  12153 ?        00:00:00 kworker/0:0H
  12174 ?        00:00:01 kworker/1:3-events
  12178 ?        00:00:20 firefox
  12238 ?        00:00:04 Web Content
  12283 ?        00:00:02 WebExtensions
  12337 ?        00:00:01 Web Content
  12365 ?        00:00:00 kworker/2:2H
  12370 ?        00:00:00 kworker/2:0-events
  12385 ?        00:00:00 kworker/0:2-events
  12389 ?        00:00:00 kworker/1:0-mm_percpu_wq
  12392 ?        00:00:00 kworker/3:3-mm_percpu_wq
  12395 ?        00:00:00 kworker/2:2-events
  12397 ?        00:00:00 kworker/u8:1
  12401 ?        00:00:00 kworker/0:0-events
  12405 ?        00:00:00 kworker/0:3-events
  12406 ?        00:00:00 kworker/1:1-events
  12408 ?        00:00:00 kworker/u8:4
  12409 ?        00:00:00 kworker/1:2H
  12412 pts/0    00:00:00 ps
frank@frank-desktop:/etc$ 


	PID 12132 is thttpd_wrapper and PID 12133 is thttpd.

frank@frank-desktop:/etc$ 
frank@frank-desktop:/etc$ less services		# This will show a listing of service ports.
...
	(This file has a list of "Ports" that are in use. The default "HTTP port is 80.") thttpd's default port is 80, port numbers are 16-bit so can range from 1 - 65536. Only one service can use a port number at a time, thus we see that my Raspberry Pi web server will give the same information on all of the IPv4 addresses that are attached to it, i.e., eth0, and wlan0 with its different IP addresses both connected to the same http port 80. In a classroom situation, more than 200 students can be connected to the same "C" class network (192.168.xxx.0/24) and can each connect to each other's web servers, where xxx is the same for all, and the 0 position can very from 2 - 254, with 0 representing the network, 255 is reserved for the broadcast address, and 1 reserved for the router address. With the router set up as a “DHCP Server” all of the computers would receive dynamic IP addresses and all of their http websites would be available in the addresses they were assigned. The http port number (80) is assigned by the computers and the IP addresses are assigned from the router.
	The router separates the “Local Area Network” (LAN) from the “Wide Area Network” (WAN). Just as the HTTP default address is port 80 and is static, the router has to have the internal IP address for our website “static” so it can pass information back and forth from our internal web server to the external Internet. In the file “2019-10-01-website.txt” I discuss the process of setting the internal web server to a static internal IP address.
	In the router, under the “Advanced” tab, select “Virtual Server”, and it should display a message similar to: “This page allows you to configure a virtual server, so others can access the server through the Gateway.” This will probably very with different routers so one might have to search a bit to find the similar place. The “usual Service Name” should have a selection of something like “web” or “http” and choose this. It should then show the “Protocol” as “TCP”, “WAN Port” as “80”, and “LAN Open Port” as “80”. In the “LAN IP Address” type in the static internal IP address of your web server, and press, “Apply Changes”.  This should fill in a table in “Current Virtual Server Forwarding Table” with “ServerName - WEB”, “Protocol - tcp”, “Local IP Address - 192.168.x.2” i.e., your internal IP address, “Local Port - 80-80”, “WAN Port - 80-80”, “State - Enable”, and possibly “Action either Delete or Disable”.
	With this enabled, your website should be available to the WAN. Since your ISP is providing your external IP address, it doesn’t matter if it is dynamic or static. Until you get an idea of the activity that is taking place on the web, it would probably be good just to have a dynamic address if that is what you have. If you are in an area of extreme censorship, it will make the censorship game more of a “Cat and Mouse” game since your site could be bouncing around all sorts of different IP addresses. “Free Speech for the WORLD!”

	Another reason we use "/home" user directories in the "www" group is to be able to keep all of our original web files there and then just send a copy to the "public_html" directory where it is instantly live. This also reduces the size of our web site by eliminating the bloat of having original files mixed in with our files needed for the web site. It will also reduce the time it will take for the Web Search "spiders" to see what content is available on our sites. When we use "HTML" code for our web pages, the root of the page will be in "index.html" and then the items listed in this file can be in the same directory or in sub directories. If you have a lot of "images" on your web page, you would probably want to put all of them in a sub-directory called, "images" just to keep similar things together and easier to find. To test your "index.html" file, you just open it with a web browser and see if everything is functioning. Then when everything is OK, just move your changes and additions to "public_html" and then open your web browser to "http://xxx.xxx.xxx.xxx/" and see if everything is working. Most web browsers keep a copy of your pages in cache so if the changes don't appear you will have to refresh your web page (usually the little circle with an arrow on it). If the changes still don't appear, possibly you forgot to move the changes to "public_html". Just a reminder, all of the directories in "public_html" need to be "0755" to work and files need to be "0644" to work. If you get to the point of using "cgi" programs they will also need to be "0755" so they can execute, and also need to have the right ending on those files, the documentation for "thttpd" talks about all of this.

	Links:
	These links are the easiest and best I have found for sharing the “Good News” I found around my seventh birthday, the Fall of 1955. Frank Anderson, ac0xl.
http://4laws.com/laws/languages.html, 4 Spiritual Laws.
https://www.cru.org/us/en/train-and-grow/spiritual-growth/the-spirit-filled-life.html, The Spirit Filled Life.
https://www.cru.org, Exploring Your Life’s Purpose - Let’s journey together.
https://godtoolsapp.com, GodTools - Helping You Share Your Faith.
#

