# 2025-08-15-64-bit-thttpd-build.txt thttpd - tiny/turbo/throttling HTTP server version 2.29 of 23May2018 thttpd is a simple, small, portable, fast, and secure HTTP server. Simple: It handles only the minimum necessary to implement HTTP/1.1. Small: See the size comparison chart at http://www.acme.com/software/thttpd/notes.html#sizes. It also has a very small run-time size, since it does not fork and is very careful about memory allocation. Portable: It compiles cleanly on FreeBSD 2.x/3.x, SunOS 4.1.x, Solaris 2.x, BSD/OS 2.x, Linux 1.2.x, OSF/1 (on a 64-bit Alpha), and no doubt many others. Fast: In typical use it's about as fast as the best full-featured servers (Apache, NCSA, Netscape). Under extreme load it's much faster. Secure: It goes to great lengths to protect the web server machine against attacks and breakins from other sites. It also has one extremely useful feature (URL-traffic-based throttling) that no other server currently has. See the manual entry for more details. See the INSTALL file for configuration and installation instructions. Check the web page (http://www.acme.com/software/thttpd/) for updates, or add yourself to the mailing list by sending a "subscribe" to thttpd-announce-request@mail.acme.com. Comments to: Jef Poskanzer jef@mail.acme.com http://www.acme.com/jef/ 2025-07-29 "thttpd" is secure and safe enough that even a 3rd or 4th grader should be able to compile it from source code to have "the new printing press" that publishes to the Whole Wide World! Building thttpd from source code generates a program that is optimized for the computer it will be running on! If it is built on a 32-bit OS the maximum size file that will be served will be less than 2 Gigabytes! On a 64-bit OS the file size that will be served is unlimited! Being able to say that I built my web server "thttpd" from source code is a real accomplishment for one of any age! The build is very simple and takes only a very few minutes! #1. make clean ### Step one. ***** Since this program has been run before, the first command needs to be: "make clean", to clear all of the old data.***** ###, #2. ./configure ### Step two. #3. make ### Step three. #4. # The last step demands being "root" #4. sudo make install ## sudo Step four. At this point the thttpd program has been generated. Since the source code is from the 1990s and the computers at that time are what we would call antique by our standards, thttpd will actually compile and run of the computers we have today! ### 61 To reduce the amount of work needed to install thttpd, I have copied the files from Acme.com and made some modifications. These files have been changed in thttpd-2.29, and these are the changes that were made! *****If you expand "thttpd-2.29.tar.gz" these changes will be missing!***** See: cat ~/freedom/thttpd-2.29-file-changes.txt for the changes that were made. ### 63 Two files from "Free Software Foundation, Inc." www.fsf.org listed the computers from that age, Copyright 1992 - 1996 "configure.guess" 15 pages, 693 lines, and Copyright 1991 - 1886 "config.sub" 19 pages, 927 lines. These files are not listed on their site now but GCC has been updated and they are not required now. "make" generates some warnings which I suppose are by design. An example is: "thttpd.c:611:12: warning" implicit declaration of function 'sigset'; which is listed earlier in the file with different variables in the preprocessor section and are listed: "#ifndef HAVE_SIGSET" ****** note it is #ifndef which is "if not defined" ****** ### 66 /* Set up handler again. */ ### 69 (void) signal( SIGCHLD, handle chld ); ### 73 #endif /* ! HAVE_SIGSET */ ****** the "!" means NOT so says: "NOT HAVE_SIGSET" ****** ### 77 By the time it gets to line 609, HAVE_SIGSET is still not defined : ### 80 609 /* Set up to catch signals. */ ### 84 610 #ifdef HAVE_SIGSET ### 88 611 (void) sigset( SIGTERM, handle_term ); ### 92 612 (void) sigset( SIGINT, handle_term ); ### 96 613 (void) sigset( SIGCHLD, handle_chld ); ### 100 614 (void) sigset( SIGPIPE, SIG_IGN ); /* get EPIPE instead */ ### 104 615 (void) sigset( SIGHUP, handle_hup ); ### 108 616 (void) sigset( SIGUSR1, handle_usr1 ); ### 112 617 (void) sigset( SIGUSR2, handle_usr2 ); ### 116 618 (void) sigset( SIGALRM, handle_alrm ); ### 120 619 #else /* HAVE_SIGSET */ ### 124 620 (void) signal( SIGTERM, handle_term ); ### 128 621 (void) signal( SIGINT, handle_term ); ### 132 622 (void) signal( SIGCHLD, handle_chld ); ### 136 623 (void) signal( SIGPIPE, SIG_IGN ); /* get EPIPE instead */ ### 140 624 (void) signal( SIGHUP, handle_hup ); ### 144 625 (void) signal( SIGUSR1, handle_usr1 ); ### 148 626 (void) signal( SIGUSR2, handle_usr2 ); ### 152 627 (void) signal( SIGALRM, handle_alrm ); ### 156 628 #endif /* HAVE_SIGSET */ ### 160 The first time 610 #ifdef HAVE_SIGSET ******HAVE_SIGSET is NOT defined so it generates an error ****** ### 165 at 619 #else /* HAVE_SIGSET */ ****** the options are again repeated ****** ### 169 at 628 #endif /* HAVE_SIGSET */ ****** Now "HAVE_SIGSET" is set and the next time when it hits line 610 it will be defined and not have to go through the extra steps! ****** ### 173 The only error I found with thttpd-2.29 was the directory for "man1" was not created and once that directory was added to the computer the program would compile and work even on older machines. ### 178 The "README" file has the changes I made to "thttpd-2.29" and more information on "CGI" (Common Gateway Interface). See: rfc3875-CGI.txt ### 183 pi@raspberrypi:~ $ # setup Geany preferences, load source fine into Geany (under "VIEW") then set Read Only so you do not wipe out the source file or anything in it! Been There, Done That! ### 188 pi@raspberrypi:~ $ ### 192 pi@raspberrypi:~ $ # Move Geany to the top half of the screen. Under "Edit", then "Preferences", then "Terminal", the "Scrollback Lines" only goes to a max of 5000 lines and tends to revert to just 500 lines! ### 196 pi@raspberrypi:~ $ ### 200 pi@raspberrypi:~ $ # Setup "Terminal" on the lower half of the screen. Under "Edit", "Preferences", "Display", I set the "Scrollback Lines" to 20000 in hopes I will be able to capture all of the process! If one types "exit" in terminal it will exit and you will loose all of the information you have not copied to a regular file! Been There, Done That! ### 204 pi@raspberrypi:~ $ ### 208 pi@raspberrypi:~ $ # To enter a line of text in the terminal so you can save your ideas, one has to start the line with "# " or at least the "#". ### 212 pi@raspberrypi:~ $ ### 213 pi@raspberrypi:~ $ # Since I changed the thttpd "configure" file where line 12 is changed from "/usr/local" to "/home/local", one has to change the $PATH command by adding "/home/local/sbin:/home/local/bin:" to the beginning of the $PATH original commands. Ubuntu uses the file "etc/environment" while Raspberry Pi uses "/etc/profile". ### 217 pi@raspberrypi:~ $ ### 221 pi@raspberrypi:~ $ ### 223 pi@raspberrypi:~ $ cd /etc ### 227 pi@raspberrypi:/etc $ ### 229 pi@raspberrypi:/etc $ cat environment ### Ubuntu was putting the original PATH command here, so just check. ### 233 pi@raspberrypi:/etc $ ### 237 pi@raspberrypi:/etc $ ### 239 pi@raspberrypi:/etc $ cat profile ### 243 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) ### 247 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). ### 251 if [ "$(id -u)" -eq 0 ]; then ### 255 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ### 259 else ### 263 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games" ### 267 fi ### 271 export PATH ### 275 if [ "${PS1-}" ]; then ### 281 if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then ### 285 # The file bash.bashrc already sets the default PS1. ### 289 # PS1='\h:\w\$ ' ### 292 if [ -f /etc/bash.bashrc ]; then ### 296 . /etc/bash.bashrc ### 300 fi ### 304 else ### 308 if [ "$(id -u)" -eq 0 ]; then ### 312 PS1='# ' ### 216 else ### 320 PS1='$ ' ### 324 fi ### 328 fi ### 332 fi ### 336 if [ -d /etc/profile.d ]; then ### 342 for i in /etc/profile.d/*.sh; do ### 346 if [ -r $i ]; then ### 350 . $i ### 354 fi ### 358 done ### 362 unset i ### 366 fi ### 370 pi@raspberrypi:/etc $ ### 374 pi@raspberrypi:/etc $ ### 376 pi@raspberrypi:/etc $ # Both lines in "profile" will need to be changed using "sudo nano profile" and then adding: /home/local/sbin:/home/local/bin: after PATH=" and before /usr/local/sbin:/usr/local/bin: so the lines will start with: ### 380 PATH="/home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ### 384 The ":" colon gives the next directory for the path to search! ### 388 pi@raspberrypi:/etc $ ### 392 pi@raspberrypi:/etc $ ### 394 pi@raspberrypi:/etc $ $PATH ### 398 bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory ### 402 pi@raspberrypi:/etc $ ### 406 pi@raspberrypi:/etc $ ### 408 pi@raspberrypi:/etc $ sudo nano profile ### 412 pi@raspberrypi:/etc $ ### 416 pi@raspberrypi:/etc $ ### 418 pi@raspberrypi:/etc $ # make the changes ### 422 pi@raspberrypi:/etc $ ### 426 pi@raspberrypi:/etc $ # Write out file "Ctrl O" for out, That is shown as "^o", hold down the control button and press the "o" button. ### 430 pi@raspberrypi:/etc $ ### 434 pi@raspberrypi:/etc $ # After you enter "y" for yes and the file is written, then it is "^x" for "Ctrl X" to exit nano. ### 438 pi@raspberrypi:/etc $ ### 442 pi@raspberrypi:/etc $ ### 444 pi@raspberrypi:/etc $ cat profile ### 448 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) ### 452 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). ### 456 if [ "$(id -u)" -eq 0 ]; then ### 461 PATH="/home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ### 465 else ### 469 PATH="/home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games" ### 473 fi ### 477 export PATH ### 481 if [ "${PS1-}" ]; then ### 487 if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then ### 491 # The file bash.bashrc already sets the default PS1. ### 495 # PS1='\h:\w\$ ' ### 499 if [ -f /etc/bash.bashrc ]; then ### 503 . /etc/bash.bashrc ### 507 fi ### 511 else ### 515 if [ "$(id -u)" -eq 0 ]; then ### 519 PS1='# ' ### 523 else ### 527 PS1='$ ' ### 531 fi ### 535 fi ### 539 fi ### 543 if [ -d /etc/profile.d ]; then ### 548 for i in /etc/profile.d/*.sh; do ### 552 if [ -r $i ]; then ### 556 . $i ### 560 fi ### 564 done ### 568 unset i ### 572 fi ### 576 pi@raspberrypi:/etc $ ### 582 pi@raspberrypi:/etc $ ### 584 pi@raspberrypi:/etc $ $PATH ### 588 bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory ### 592 pi@raspberrypi:/etc $ ### 596 pi@raspberrypi:/etc $ ### 698 pi@raspberrypi:/etc $ # The computer has to be restarted for the new path to take effect, so make sure everything is correct! ### 602 pi@raspberrypi:/etc $ If you are saving the "terminal" file save it now! reboot will wipe out everything that is not saved! ### 606 pi@raspberrypi:/etc $ reboot ### 610 pi@raspberrypi-400:~ $ ### 615 pi@raspberrypi-400:~ $ date ### 617 Tue Aug 12 11:49:14 AM MDT 2025 ### 619 pi@raspberrypi-400:~ $ ### 621 pi@raspberrypi-400:~ $ $PATH ### 625 bash: /home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory ### 627 pi@raspberrypi-400:~ $ ### 629 pi@raspberrypi-400:~ $ ### 631 pi@raspberrypi-400:~ $ # The computer has restarted and a new "terminal" is created, and the "Geany" program is brought up, then make sure under "Document" "Read only" is checked! We do not want to destroy the directions! ### 633 pi@raspberrypi-400:~ $ ### 635 pi@raspberrypi-400:~ $ date ### 640 Tue Aug 12 11:50:23 AM MDT 2025 ### 642 pi@raspberrypi-400:~ $ ### 644 pi@raspberrypi-400:~ $ ### 646 pi@raspberrypi-400:~ $ $PATH ### 650 bash: /home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory ### 652 pi@raspberrypi-400:~ $ ### 654 pi@raspberrypi-400:~ $ pi@raspberrypi-400:~ $ # The path is correct so we can continue with the install! ### 658 pi@raspberrypi-400:~ $ ### 660 pi@raspberrypi-400:~ $ ### 662 pi@raspberrypi-400:~ $ # "lynx" is in /bin and is a text based web browser that will run with less then 512 MB of RAM. "lynx --help" will give some directions and will be needed if one wants to operate on the "Raspberry Pi Zero 2 W" or do a build from that computer. ### 664 pi@raspberrypi-400:~ $ ### 666 pi@raspberrypi-400:~ $ ### 668 pi@raspberrypi-400:~ $ # ***************************** ### 670 pi@raspberrypi-400:~ $ # ***************************** ### 672 pi@raspberrypi-400:~ $ # ***************************** ### 674 pi@raspberrypi-400:~ $ ### 676 pi@raspberrypi-400:~ $ ### 678 pi@raspberrypi-400:~ $ # ### This is the beginning of the "cut and paste" process, which also includes checking or testing! ### 680 pi@raspberrypi-400:~ $ ### 682 pi@raspberrypi-400:~ $ ### 684 pi@raspberrypi:~ $ date ### 689 Thu Aug 14 02:05:32 PM MDT 2025 ### 690 pi@raspberrypi:~ $ ### 691 pi@raspberrypi:~ $ $PATH ### 694 bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory ### 695 pi@raspberrypi:~ $ pi@raspberrypi:~ $ cat /etc/environment ### 699 pi@raspberrypi:~ $ pi@raspberrypi:~ $ ##### ### 701 pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 705 Thu Aug 14 02:07:04 PM MDT 2025 ### 706 pi@raspberrypi:~ $ ### 707 pi@raspberrypi:~ $ $PATH ### 710 bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ cd /etc ### ### 716 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ cat environment ### Ubuntu was putting the original PATH command here, so just check. ### ### 721 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ cat profile ### 720 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "$(id -u)" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games" fi export PATH if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "$(id -u)" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi pi@raspberrypi:/etc $ ### 761 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Both lines in "profile" will need to be changed using "sudo nano profile" and then adding: /home/local/sbin:/home/local/bin: after PATH=" and before /usr/local/sbin:/usr/local/bin: so the lines will start with: ### 765 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # PATH="/home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ### 770 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # The ":" colon gives the next directory for the path to search! ### 775 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ $PATH ### 780 bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ sudo nano profile ### 786 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # (copy, paste : /home/local/sbin:/home/local/bin: into both lines.) pi@raspberrypi:/etc $ # write corrections with ^o (ctl and o the letter for output) pi@raspberrypi:/etc $ # Exit nano with ^x (ctl and x the letter for exit) pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # make the changes ### 793 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Write out file "Ctrl O" for out, That is shown as "^o", hold down the control button and press the "o" button. ### 795 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # After you enter "y" for yes and the file is written, then it is "^x" for "Ctrl X" to exit nano. ### 797 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ cat profile ### 801 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "$(id -u)" -eq 0 ]; then PATH="/home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games" fi export PATH if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "$(id -u)" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Make sure the new path is correct or you might have problems with your computer!!! ### 840 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ $PATH ### 844 bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # The computer has to be restarted for the new path to take effect, so make sure everything is correct! ### 849 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # reboot ### 855 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ date ### 860 Thu Aug 14 02:30:24 PM MDT 2025 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:~ $ # reboot ### 869 pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 873 Thu Aug 14 02:37:56 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ $PATH ### 879 bash: /home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # The computer has restarted and a new "terminal" is created, and the "Geany" program is brought up, then make sure under "Document" "Read only" is checked! We do not want to destroy the directions! ### 885 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 890 Thu Aug 14 02:47:00 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ $PATH ### 895 bash: /home/local/sbin:/home/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory pi@raspberrypi:~ $ pi@raspberrypi:~ $ # "lynx" is in /bin and is a text based web browser that will run with less then 512 MB of RAM. "lynx --help" will give some directions and will be needed if one wants to operate on the "Raspberry Pi Zero 2W" or do a build from that computer. ### 900 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # ***************************** ### 903 pi@raspberrypi:~ $ # ***************************** ### 904 pi@raspberrypi:~ $ # ***************************** ### 905 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # ### This is the beginning of the "cut and paste" process, which also includes checking or testing! ### 901 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ date 915 Thu Aug 14 02:49:34 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ### The "~" shows that we are in the "home directory of 'pi'", from the beginning of the line, (/home/pi/). Line 921 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ cd /etc ### 926 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ cat group ### (we are looking for a group "www") 931 root:x:0: root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:pi 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:pi fax:x:21: voice:x:22: cdrom:x:24:pi floppy:x:25: tape:x:26: sudo:x:27:pi audio:x:29:pi,pulse dip:x:30: www-data:x:33: backup:x:34: operator:x:37: list:x:38: irc:x:39: src:x:40: shadow:x:42:vnc utmp:x:43: video:x:44:pi,vnc sasl:x:45: plugdev:x:46:pi staff:x:50: games:x:60:pi users:x:100:pi nogroup:x:65534: systemd-journal:x:999: systemd-network:x:998: crontab:x:101: input:x:102:pi,lightdm sgx:x:103: kvm:x:104: render:x:105:pi,vnc pi:x:1000: systemd-timesync:x:997: messagebus:x:106: _ssh:x:107: bluetooth:x:108: avahi:x:109: netdev:x:110:pi polkitd:x:996: spi:x:995:pi i2c:x:994:pi gpio:x:993:pi lightdm:x:111: rtkit:x:112: pipewire:x:113: rdma:x:114: lpadmin:x:115:pi ssl-cert:x:116: pulse:x:117: pulse-access:x:118: scanner:x:119:saned saned:x:120: vnc:x:992: colord:x:121: feedbackd:x:122: pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Since there is no group "www" with the user "(pi)" we will need to add this, getting the directions by using "addgroup --help" to see our options. ### 1006 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ addgroup --help ### 1011 adduser [--uid id] [--firstuid id] [--lastuid id] [--gid id] [--firstgid id] [--lastgid id] [--ingroup group] [--add-extra-groups] [--shell shell] [--comment comment] [--home dir] [--no-create-home] [--allow-all-names] [--allow-bad-names] [--disabled-password] [--disabled-login] [--conf file] [--quiet] [--verbose] [--debug] user Add a normal user adduser --system [--uid id] [--group] [--ingroup group] [--gid id] [--shell shell] [--comment comment] [--home dir] [--no-create-home] [--conf file] [--quiet] [--verbose] [--debug] user Add a system user adduser --group [--gid ID] [--firstgid id] [--lastgid id] [--conf file] [--quiet] [--verbose] [--debug] group addgroup [--gid ID] [--firstgid id] [--lastgid id] [--conf file] [--quiet] [--verbose] [--debug] group Add a user group addgroup --system [--gid id] [--conf file] [--quiet] [--verbose] [--debug] group Add a system group adduser USER GROUP Add an existing user to an existing group pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # ***************************** ### 1050 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # From this we get the commands we need to add a system group "www" and make "(pi)" a member of this group. ### 1055 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ ### We need to add a system group "www". Then make "(pi)" a member of this group. ### 1060 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Directions: ### 1066 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # addgroup --system pi@raspberrypi:/etc $ # [--gid id] pi@raspberrypi:/etc $ # [--conf file] [--quiet] [--verbose] [--debug] pi@raspberrypi:/etc $ # group pi@raspberrypi:/etc $ # Add a system group pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Enter: 1080 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ sudo addgroup --system www ### sudo 1084 Adding group `www' (GID 123) ... Done. pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Directions: ### 1091 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # adduser USER GROUP pi@raspberrypi:/etc $ # Add an existing user to an existing group pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Enter: ### 1101 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ sudo adduser pi www ### sudo 1105 Adding user `pi' to group `www' ... Done. pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ cat group ### 1113 root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:pi 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:pi fax:x:21: voice:x:22: cdrom:x:24:pi floppy:x:25: tape:x:26: sudo:x:27:pi audio:x:29:pi,pulse dip:x:30: www-data:x:33: backup:x:34: operator:x:37: list:x:38: irc:x:39: src:x:40: shadow:x:42:vnc utmp:x:43: video:x:44:pi,vnc sasl:x:45: plugdev:x:46:pi staff:x:50: games:x:60:pi users:x:100:pi nogroup:x:65534: systemd-journal:x:999: systemd-network:x:998: crontab:x:101: input:x:102:pi,lightdm sgx:x:103: kvm:x:104: render:x:105:pi,vnc pi:x:1000: systemd-timesync:x:997: messagebus:x:106: _ssh:x:107: bluetooth:x:108: avahi:x:109: netdev:x:110:pi polkitd:x:996: spi:x:995:pi i2c:x:994:pi gpio:x:993:pi lightdm:x:111: rtkit:x:112: pipewire:x:113: rdma:x:114: lpadmin:x:115:pi ssl-cert:x:116: pulse:x:117: pulse-access:x:118: scanner:x:119:saned saned:x:120: vnc:x:992: colord:x:121: feedbackd:x:122: www:x:123:pi pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # Success, Group "www" has a user "(pi)" and is also less than 1000, (the number will probably be different than 123). ### 1189 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # ***************************** ### 1192 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # The idea is to use the "users" accounts as if they were the header choices that are normally at the top of a web page. For my site, I have: ac0xl, delinquent-accounts, documents, downloads, freedom, memes, music, notices, pictures, rome, searles-sav-on-propane, va, and videos. The files: favicon.ico, readme.txt, and robots.txt and sitemap.xml (if you are using the IP Address option) are web site files that get added later. The idea is to make a list of the things you want on your web site and type them up so you can select the name and then copy and paste it later when all of the users get added. This will save a lot of typing and typing mistakes! ### 1198 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ # For the initial primary user, which should be at the top of the list, one could use "a0" an "a" and a "zero", since in the "ASCII Character Set" an "a" is "61 hex" and a "zero" is "30 hex" and should be one of the normal things that should end up on the top of the list. If you are running a different Character Set, your choice might be different. The different user accounts to start with will be: a0, documents, downloads, memes, music, notices, pictures, and videos (in "list.txt"). Other "users" can be added later as your site starts to grow. ("user" is expecting a name which starts with a lower case letter.) ### 1203 pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ pi@raspberrypi:/etc $ cd ~/freedom/Acme.com/thttpd-2.29 ### 1208 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # Now that your list of ideas for your web site is growing, it is time to start the process of installing "thttpd". The first thing to do is make sure the above files in "thttpd-2.29" have all been changed. If not, make the changes and check again. All of these commands will be made in the terminal window under: "/home/(pi)/freedom/Acme.come/thttpd-2.29" # This equates to "~/freedom/Acme.com/thttpd-2.29" ### 1213 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ ls ### 1219 aclocal.m4 configure INSTALL match.o scripts timers.c cgi-bin configure.in install-sh mime_encodings.h strerror.c timers.h cgi-src contrib libhttpd.c mime_encodings.txt tdate_parse.c timers.o config.cache extras libhttpd.h mime_types.h tdate_parse.h TODO config.guess fdwatch.c libhttpd.o mime_types.txt tdate_parse.o version.h config.h fdwatch.h Makefile mmc.c thttpd config.log fdwatch.o Makefile.in mmc.h thttpd.8 config.status FILES match.c mmc.o thttpd.c config.sub index.html match.h README thttpd.o pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ cat ~/freedom/install.txt ### (The directory "freedom" should be in "/home/(pi)/"). ### 1234 install.txt # At this point you should see the above files and one called "INSTALL", which begins with: # 1 To build: # 2 # 3 % ./configure # 4 # 5 Edit config.h to change the configuration options if necessary. # 6 # 7 % make # 8 # 9 # 10 To install: # 11 # 12 % make install # 13 # 14 Edit one of your system rc files to run thttpd at boot time. Do NOT # 15 run it from inetd, that setup is inefficient so thttpd doesn't support it. # 16 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ***** Since this program has been run before, the first command needs to be: "make clean", to clear all of the old data.***** ### 1258 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # (The "%" is the computer prompt: type in: ./configure # and then a return.) ### 1263 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ***** Starting the compile. ***** ### 1267 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ***** Starting the compile. ***** ### 1272 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # make: *** No rule to make target 'clean'. Stop. # Or a short list of files and directories that have been removed. ### 1277 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ date ### 1282 Thu Aug 14 03:09:49 PM MDT 2025 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # *************** Step one. ### 1287 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ make clean ### Step one. 1283 for i in cgi-src extras ; do ( \ cd $i ; \ pwd ; \ make clean \ ) ; done /home/pi/freedom/Acme.com/thttpd-2.29/cgi-src make[1]: Entering directory '/home/pi/freedom/Acme.com/thttpd-2.29/cgi-src' rm -f *.o redirect ssi phf make[1]: Leaving directory '/home/pi/freedom/Acme.com/thttpd-2.29/cgi-src' /home/pi/freedom/Acme.com/thttpd-2.29/extras make[1]: Entering directory '/home/pi/freedom/Acme.com/thttpd-2.29/extras' rm -f *.o makeweb htpasswd make[1]: Leaving directory '/home/pi/freedom/Acme.com/thttpd-2.29/extras' rm -f thttpd thttpd.o libhttpd.o fdwatch.o mmc.o timers.o match.o tdate_parse.o mime_encodings.h mime_types.h pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # Some errors will be reported since the ARM names are not in its database and will not be optimized for the processor, but don't worry. If the file ends with an error report, look back up a few lines and it will probably say what the problem was that created the error. The easy way is to just set up this page along with a terminal screen and then copy the command and paste it onto the terminal command line. This is how I will be testing the install file, and making a copy of it if you need it. ### 1313 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ ### ./configure ### Step two. "./configure" expects an executable file! - Thus: # bash: ./configure: Permission denied ### "freedom" has to be copied using a linux file system!!! You need to use a linux formatted file system preferably on a SD card. I later ended up recompiling "thttpd" and that is what I should have done at this point! ### 1319 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # This can happen if you use a Windows formatted hard drive. I found this out when I tried to copy files from a hard drive and Linux said that the attributes had added execute privileges, but when I looked at the files there was no change! ### 1324 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ******* If you get this recopy "freedom" using linux formatted media!!! and start again! THEN # ******* cd ~/freedom/Acme.com/thttpd-2.29 ### then: make clean ### Step one. ******* ### 1330 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ ./configure ### Step two. 1337 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 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ******************* ### Step three. ### 1406 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # The next step: "make" will generate more pages and should end with something like this: ### 1412 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # The warnings will pause but should continue so do not panic, just give it time to continue! ### 1418 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ make ### Step three. 1426 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 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 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=/home/local/www \ CGIBINDIR=/home/local/www/cgi-bin \ MANDIR=/home/local/man \ WEBGROUP=www \ ) ; done /home/pi/freedom/Acme.com/thttpd-2.29/cgi-src make[1]: Entering directory '/home/pi/freedom/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 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/pi/freedom/Acme.com/thttpd-2.29/cgi-src' /home/pi/freedom/Acme.com/thttpd-2.29/extras make[1]: Entering directory '/home/pi/freedom/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=\"/home/local/www\" -c makeweb.c 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=\"/home/local/www\" -c htpasswd.c gcc htpasswd.o -o htpasswd -lcrypt make[1]: Leaving directory '/home/pi/freedom/Acme.com/thttpd-2.29/extras' pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # *************** Step four. ### 1486 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # The last step demands being "root" so it is: "sudo make install" which should end with something like this: ### sudo 1494 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ sudo make install ### sudo Step four. 1502 mkdir -p /home/local/sbin /usr/bin/install -c -m 555 -o bin -g bin thttpd /home/local/sbin mkdir -p /home/local/man/man1 mkdir -p /home/local/man/man8 /usr/bin/install -c -m 444 -o bin -g bin thttpd.8 /home/local/man/man8 for i in cgi-src extras ; do ( \ cd $i ; \ pwd ; \ make \ WEBDIR=/home/local/www \ CGIBINDIR=/home/local/www/cgi-bin \ MANDIR=/home/local/man \ WEBGROUP=www \ install \ ) ; done /home/pi/freedom/Acme.com/thttpd-2.29/cgi-src make[1]: Entering directory '/home/pi/freedom/Acme.com/thttpd-2.29/cgi-src' mkdir -p /home/local/www/cgi-bin rm -f /home/local/www/cgi-bin/redirect cp redirect /home/local/www/cgi-bin/redirect rm -f /home/local/man/man8/redirect.8 cp redirect.8 /home/local/man/man8/redirect.8 rm -f /home/local/www/cgi-bin/ssi cp ssi /home/local/www/cgi-bin/ssi rm -f /home/local/man/man8/ssi.8 cp ssi.8 /home/local/man/man8/ssi.8 rm -f /home/local/www/cgi-bin/phf cp phf /home/local/www/cgi-bin/phf make[1]: Leaving directory '/home/pi/freedom/Acme.com/thttpd-2.29/cgi-src' /home/pi/freedom/Acme.com/thttpd-2.29/extras make[1]: Entering directory '/home/pi/freedom/Acme.com/thttpd-2.29/extras' rm -f /home/local/sbin/makeweb /home/local/sbin/htpasswd /home/local/sbin/syslogtocern cp makeweb /home/local/sbin/makeweb chgrp www /home/local/sbin/makeweb chmod 2755 /home/local/sbin/makeweb cp htpasswd /home/local/sbin/htpasswd cp syslogtocern /home/local/sbin/syslogtocern rm -f /home/local/man/man1/makeweb.1 cp makeweb.1 /home/local/man/man1/makeweb.1 rm -f /home/local/man/man1/htpasswd.1 cp htpasswd.1 /home/local/man/man1/htpasswd.1 rm -f /home/local/man/man8/syslogtocern.8 cp syslogtocern.8 /home/local/man/man8/syslogtocern.8 make[1]: Leaving directory '/home/pi/freedom/Acme.com/thttpd-2.29/extras' pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ date ### 1553 Thu Aug 14 03:20:12 PM MDT 2025 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ***************************** ### 1558 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # ### "thttpd" is now installed. 1565 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ # The next thing is to add directories "logs" and "users" to the "www" directory. ### 1570 pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ pi@raspberrypi:~/freedom/Acme.com/thttpd-2.29 $ cd /home/local/www ### 1576 pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ ls -al ### 1582 total 12 drwxr-xr-x 3 root root 4096 Aug 14 15:19 . drwxr-xr-x 5 root root 4096 Aug 14 15:19 .. drwxr-xr-x 2 root root 4096 Aug 14 15:19 cgi-bin pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ sudo mkdir -v logs users ### sudo 1592 mkdir: created directory 'logs' mkdir: created directory 'users' pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ ls -al ### 1599 total 20 drwxr-xr-x 5 root root 4096 Aug 14 15:22 . drwxr-xr-x 5 root root 4096 Aug 14 15:19 .. drwxr-xr-x 2 root root 4096 Aug 14 15:19 cgi-bin drwxr-xr-x 2 root root 4096 Aug 14 15:22 logs drwxr-xr-x 2 root root 4096 Aug 14 15:22 users pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ # ********* We need this! ### 1611 pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ sudo chmod -v 775 users ### sudo 1619 mode of 'users' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x) pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ ls -al ### 1625 total 20 drwxr-xr-x 5 root root 4096 Aug 14 15:22 . drwxr-xr-x 5 root root 4096 Aug 14 15:19 .. drwxr-xr-x 2 root root 4096 Aug 14 15:19 cgi-bin drwxr-xr-x 2 root root 4096 Aug 14 15:22 logs drwxrwxr-x 2 root root 4096 Aug 14 15:22 users pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ # Make sure users is now 0775 (drwxrwxr-x). 1636 pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ # ******************* ### 1639 pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/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". ### 1644 pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ pi@raspberrypi:/home/local/www $ cd ../ ### 1650 pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ sudo chown -vR root:www www ### sudo 1656 changed ownership of 'www/users' from root:root to root:www changed ownership of 'www/logs' 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/ssi' from root:root to root:www changed ownership of 'www/cgi-bin' from root:root to root:www changed ownership of 'www' from root:root to root:www pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ ls -al ### 1669 total 20 drwxr-xr-x 5 root root 4096 Aug 14 15:19 . drwxr-xr-x 4 root root 4096 Aug 14 15:19 .. drwxr-xr-x 4 root root 4096 Aug 14 15:19 man drwxr-xr-x 2 root root 4096 Aug 14 15:19 sbin drwxr-xr-x 5 root www 4096 Aug 14 15:22 www pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ # ********* ### 1679 pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ # We now change back to the "(pi)" 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. ### 1685 pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ pi@raspberrypi:/home/local $ cd ### 1690 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ addgroup --help ### 1697 adduser [--uid id] [--firstuid id] [--lastuid id] [--gid id] [--firstgid id] [--lastgid id] [--ingroup group] [--add-extra-groups] [--shell shell] [--comment comment] [--home dir] [--no-create-home] [--allow-all-names] [--allow-bad-names] [--disabled-password] [--disabled-login] [--conf file] [--quiet] [--verbose] [--debug] user Add a normal user adduser --system [--uid id] [--group] [--ingroup group] [--gid id] [--shell shell] [--comment comment] [--home dir] [--no-create-home] [--conf file] [--quiet] [--verbose] [--debug] user Add a system user adduser --group [--gid ID] [--firstgid id] [--lastgid id] [--conf file] [--quiet] [--verbose] [--debug] group addgroup [--gid ID] [--firstgid id] [--lastgid id] [--conf file] [--quiet] [--verbose] [--debug] group Add a user group addgroup --system [--gid id] [--conf file] [--quiet] [--verbose] [--debug] group Add a system group adduser USER GROUP Add an existing user to an existing group pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # For an example, 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 "(pi)" 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. ### 1740 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # This is where one should probably use "a0" "a" (61 hex) and "0" zero (30 hex), so it will be the master user and at the top of the list for any other users one might add. "a0" is where you can put your log files. ### 1745 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # Directions: ### 1751 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # adduser [--uid id] [--firstuid id] [--lastuid id] pi@raspberrypi:~ $ # [--gid id] [--firstgid id] [--lastgid id] [--ingroup group] pi@raspberrypi:~ $ # [--add-extra-groups] [--shell shell] pi@raspberrypi:~ $ # [--comment comment] [--home dir] [--no-create-home] pi@raspberrypi:~ $ # [--allow-all-names] [--allow-bad-names] pi@raspberrypi:~ $ # [--disabled-password] [--disabled-login] pi@raspberrypi:~ $ # [--conf file] [--quiet] [--verbose] [--debug] pi@raspberrypi:~ $ # user pi@raspberrypi:~ $ # Add a normal user pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # Enter: ### 1769 pi@raspberrypi:~ $ pi@raspberrypi:~ $ sudo adduser --add-extra-groups a0 ### sudo 1773 Adding user `a0' ... Adding new group `a0' (1001) ... Adding new user `a0' (1001) with group `a0 (1001)' ... Creating home directory `/home/a0' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for a0 Enter the new value, or press ENTER for the default Full Name []: a0 Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `a0' to supplemental / extra groups `users, users' ... Adding user `a0' to group `users' ... adduser: The user `a0' is already a member of `users'. pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ su a0 ### 1798 Password: a0@raspberrypi:/home/pi $ a0@raspberrypi:/home/pi $ a0@raspberrypi:/home/pi $ # here we are still in "/home/pi", and the user is now "a0". ### 1804 a0@raspberrypi:/home/pi $ a0@raspberrypi:/home/pi $ a0@raspberrypi:/home/pi $ cd ### Change to the "a0" home directory, NOTE the "~". ### 1809 a0@raspberrypi:~ $ a0@raspberrypi:~ $ a0@raspberrypi:~ $ touch .1001 ### Since the computer uses numbers instead of names this is one way to know what number a user is. The period before the number will keep it from copying to the web page since it makes the file hidden. This is so we have the number that was assigned to this user and is from the previous construction. ### 1814 a0@raspberrypi:~ $ a0@raspberrypi:~ $ a0@raspberrypi:~ $ makeweb ### 1819 Web directory /home/local/www/users/a0 already existed. Symbolic link /home/a0/public_html already existed. a0@raspberrypi:~ $ a0@raspberrypi:~ $ a0@raspberrypi:~ $ # If makeweb does not work (no permission) did you?: sudo chmod -v 0775 /home/local/www/users #? and it actually changed the permissions to (drwxrwxr-x)? ### 1824 a0@raspberrypi:~ $ a0@raspberrypi:~ $ a0@raspberrypi:~ $ ls -al ### 1829 total 28 drwx------ 2 a0 a0 4096 Aug 14 15:39 . drwxr-xr-x 5 root root 4096 Aug 14 15:31 .. -rw-r--r-- 1 a0 a0 0 Aug 14 15:45 .1001 -rw-r--r-- 1 a0 a0 220 Aug 14 15:31 .bash_logout -rw-r--r-- 1 a0 a0 3523 Aug 14 15:31 .bashrc -rw-r--r-- 1 a0 a0 5290 Aug 14 15:31 .face lrwxrwxrwx 1 a0 a0 5 Aug 14 15:31 .face.icon -> .face -rw-r--r-- 1 a0 a0 807 Aug 14 15:31 .profile lrwxrwxrwx 1 a0 www 24 Aug 14 15:39 public_html -> /home/local/www/users/a0 a0@raspberrypi:~ $ a0@raspberrypi:~ $ a0@raspberrypi:~ $ exit ### This lets us exit back to where we were. ### 1844 exit pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ cat /etc/group ### 1852 root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:pi 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:pi fax:x:21: voice:x:22: cdrom:x:24:pi floppy:x:25: tape:x:26: sudo:x:27:pi audio:x:29:pi,pulse dip:x:30: www-data:x:33: backup:x:34: operator:x:37: list:x:38: irc:x:39: src:x:40: shadow:x:42:vnc utmp:x:43: video:x:44:pi,vnc sasl:x:45: plugdev:x:46:pi staff:x:50: games:x:60:pi users:x:100:pi,a0 nogroup:x:65534: systemd-journal:x:999: systemd-network:x:998: crontab:x:101: input:x:102:pi,lightdm sgx:x:103: kvm:x:104: render:x:105:pi,vnc pi:x:1000: systemd-timesync:x:997: messagebus:x:106: _ssh:x:107: bluetooth:x:108: avahi:x:109: netdev:x:110:pi polkitd:x:996: spi:x:995:pi i2c:x:994:pi gpio:x:993:pi lightdm:x:111: rtkit:x:112: pipewire:x:113: rdma:x:114: lpadmin:x:115:pi ssl-cert:x:116: pulse:x:117: pulse-access:x:118: scanner:x:119:saned saned:x:120: vnc:x:992: colord:x:121: feedbackd:x:122: www:x:123:pi a0:x:1001: pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ cd /home ### 1929 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ ls -al ### 1935 total 20 drwxr-xr-x 5 root root 4096 Aug 14 15:31 . drwxr-xr-x 18 root root 4096 May 12 18:17 .. drwx------ 2 a0 a0 4096 Aug 14 15:46 a0 drwxr-xr-x 5 root root 4096 Aug 14 15:19 local drwx------ 17 pi pi 4096 Aug 14 14:34 pi pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ # Since I want to be able to access "a0" from "pi" I will change the group on "a0" to "www". ### 1947 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo chown -vR a0:www a0 ### sudo 1953 changed ownership of 'a0/.bash_history' from a0:a0 to a0:www changed ownership of 'a0/.bash_logout' from a0:a0 to a0:www changed ownership of 'a0/.1001' from a0:a0 to a0:www changed ownership of 'a0/.bashrc' from a0:a0 to a0:www changed ownership of 'a0/.face.icon' from a0:a0 to a0:www changed ownership of 'a0/.profile' from a0:a0 to a0:www ownership of 'a0/public_html' retained as a0:www changed ownership of 'a0/.face' from a0:a0 to a0:www changed ownership of 'a0' from a0:a0 to a0:www pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ ls -al ### 1968 total 20 drwxr-xr-x 5 root root 4096 Aug 14 15:31 . drwxr-xr-x 18 root root 4096 May 12 18:17 .. drwx------ 2 a0 www 4096 Aug 14 15:46 a0 drwxr-xr-x 5 root root 4096 Aug 14 15:19 local drwx------ 17 pi pi 4096 Aug 14 14:34 pi pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ cd /home/local/www/users ### 1981 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ ls -al ### 1987 total 12 drwxrwxr-x 3 root www 4096 Aug 14 15:39 . drwxr-xr-x 5 root www 4096 Aug 14 15:22 .. drwxr-xr-x 2 a0 a0 4096 Aug 14 15:39 a0 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ # Since I want to be able to access "a0" from "pi" I will change the group on "a0" to "www". ### 1997 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ sudo chown -vR a0:www a0 ### sudo 2003 changed ownership of 'a0' from a0:a0 to a0:www pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ ls -al ### 2010 total 12 drwxrwxr-x 3 root www 4096 Aug 14 15:39 . drwxr-xr-x 5 root www 4096 Aug 14 15:22 .. drwxr-xr-x 2 a0 www 4096 Aug 14 15:39 a0 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ # So far so good! We now have a main www user installed. ### 2020 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ date ### 2026 Thu Aug 14 03:53:33 PM MDT 2025 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ # **************************************************************************************************************** ### 2031 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:~ $ # thttpd is still running and I am going to change and add the os-debug files and then you can see the difference they make to the log files. These are the log files before I change and add the files from "os-debug". ### 2041 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ cd /home/local/www/logs ### 2046 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ ls -al ### 2053 total 16 drwxr-xr-x 2 root www 4096 Aug 14 16:59 . drwxr-xr-x 5 root www 4096 Aug 14 16:28 .. -rw-r--r-- 1 nobody nogroup 3280 Aug 14 17:28 thttpd_log -rw-r--r-- 1 nobody nogroup 2016 Aug 14 16:59 thttpd_log.01 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cat *log.01 ### 2064 ::1 - - [14/Aug/2025:22:41:59 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" ::1 - - [14/Aug/2025:22:42:13 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://localhost/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" ::1 - - [14/Aug/2025:22:43:40 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" ::1 - - [14/Aug/2025:22:43:45 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://localhost/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:45:12 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:45:20 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:46:19 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:46:23 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.233 - - [14/Aug/2025:22:48:01 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:22:48:05 +0000] "GET /a0/ HTTP/1.1" 200 25000 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" Thu Aug 14 04:59:43 PM MDT 2025 16:59:43 up 2:25, 4 users, load average: 0.07, 0.08, 0.02 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 2:25m 1:18 0.49s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 2:25m 0.01s 0.01s -bash pi pts/4 - 16:36 23:10 3.85s ? sudo /home/local/sbin/thttpd -D -C /home/local/www/thttpd_config pi pts/6 - 16:59 0.00s 0.01s ? sudo ./thttpd-rotate pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cat *log ### 2090 Thu Aug 14 04:59:43 PM MDT 2025 16:59:43 up 2:25, 4 users, load average: 0.07, 0.08, 0.02 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 2:25m 1:18 0.49s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 2:25m 0.01s 0.01s -bash pi pts/4 - 16:36 23:10 3.85s ? sudo /home/local/sbin/thttpd -D -C /home/local/www/thttpd_config pi pts/6 - 16:59 0.00s 0.01s ? sudo ./thttpd-rotate 192.168.1.223 - - [14/Aug/2025:23:23:54 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:23:54 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:01 +0000] "GET /a0/ HTTP/1.1" 200 25000 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:30 +0000] "GET /readme.txt HTTP/1.1" 200 308 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:30 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.1.223/readme.txt" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:47 +0000] "GET /robots.txt HTTP/1.1" 200 27 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:26:42 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:26:51 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:27:00 +0000] "GET /favicon.ico HTTP/1.0" 200 533 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:27:05 +0000] "GET /readme.txt HTTP/1.0" 200 308 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:27:09 +0000] "GET /robots.txt HTTP/1.0" 200 27 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.233 - - [14/Aug/2025:23:27:58 +0000] "GET / HTTP/1.1" 200 25000 "http://192.168.1.223/a0/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:04 +0000] "GET /a0/ HTTP/1.1" 200 25000 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:10 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:41 +0000] "GET /readme.txt HTTP/1.1" 200 308 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:46 +0000] "GET /robots.txt HTTP/1.1" 200 27 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ # thttpd is still running and I am going to change and add the os-debug files and then you can see the difference they make to the log. ### 2120 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cd /home/local/sbin/os-debug/ ### 2127 pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ # The files in os-debug have additional thttpd pid numbers to help with OS problems. ### 2135 pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ ls -al ### 2141 total 48 drwxr-xr-x 2 pi pi 4096 Jul 12 2022 . drwxr-xr-x 4 root root 4096 Aug 14 16:21 .. -rwxr-xr-- 1 pi pi 185 Aug 31 2021 datelog -r-xr-xr-- 1 pi pi 185 Aug 31 2021 datelog~ -rwxr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd -r-xr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd~ -r--r--r-- 1 pi pi 792 Apr 22 2022 readme.txt -r--r--r-- 1 pi pi 792 Apr 22 2022 readme.txt~ -rwxr-xr-- 1 pi pi 1965 Aug 31 2021 thttpd-rotate -r-xr-xr-- 1 pi pi 1965 Aug 31 2021 thttpd-rotate~ -rwxr-xr-- 1 pi pi 153 Aug 31 2021 thttpd_wrapper -r-xr-xr-- 1 pi pi 153 Aug 31 2021 thttpd_wrapper~ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ cat readme.txt ### 2161 #readme.txt # # The files in os-debug have additional thttpd pid numbers to help with OS problems. # #pi@AC0XL-Pi-400:~$ #pi@AC0XL-Pi-400:~$ cd /home/local/sbin/os-debug/ ### #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ sudo cp -av d* thttp*r ../ ### sudo #'datelog' -> '../datelog' #'dead-thttpd' -> '../dead-thttpd' #'thttpd_wrapper' -> '../thttpd_wrapper' #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ # # Now we have to replace thttpd-rotate in /etc/cron.daily. # #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ sudo cp -av thttpd-rotate /etc/cron.daily ### sudo - we are adding lines for thttpd pid information. #pi@AC0XL-Pi-400:/home/local/sbin/os-debug $ # pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ sudo cp -av d* thttp*r ../ ### sudo 2189 'datelog' -> '../datelog' 'datelog~' -> '../datelog~' 'dead-thttpd' -> '../dead-thttpd' 'dead-thttpd~' -> '../dead-thttpd~' 'thttpd_wrapper' -> '../thttpd_wrapper' pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ # Now we have to replace thttpd-rotate in /etc/cron.daily. ### 2201 pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ sudo cp -av thttpd-rotate /etc/cron.daily ### sudo - we are adding lines for thttpd PID information. ### 2208 'thttpd-rotate' -> '/etc/cron.daily/thttpd-rotate' pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ # ***************** ### 2214 pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ cat thttpd_wrapper ### 2220 #!/bin/sh # thttpd_wrapper while true ; do /home/local/sbin/thttpd -D -C /home/local/www/thttpd_config /home/local/sbin/dead-thttpd sleep 10 done # pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ cat thttpd-rotate ### 2236 #!/bin/sh # /etc/cron.daily/thttpd-rotate cd /home/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 echo "log rotate end, thttpd pid = " `ps -C thttpd` >> thttpd_log w >> thttpd_log mv thttpd_log thttpd_log.01 date > thttpd_log echo "old log rotate end, old thttpd pid = " `ps -C thttpd` >> thttpd_log kill -usr1 `cat /var/run/thttpd.pid` sleep 15 echo "log rotate new, thttpd pid = " `ps -C thttpd` >> thttpd_log w >> thttpd_log # pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ cat datelog ### 2316 #!/bin/sh # datelog echo "datelog, thttpd pid = " `ps -C thttpd` >> /home/local/www/logs/thttpd_log date >> /home/local/www/logs/thttpd_log w >> /home/local/www/logs/thttpd_log # pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ date ### 2333 Thu Aug 14 05:40:48 PM MDT 2025 pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ ### sudo datelog is entered at the command prompt and there has been a problem with the system finding it, which I will test. When the commands are run from the system they all work but there seems to be a bug with them coming from the command line. ### 2341 pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ pi@raspberrypi:/home/local/sbin/os-debug $ cd /etc/cron.daily ### 2347 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ ls -al ### 2355 total 40 drwxr-xr-x 2 root root 4096 Aug 14 16:26 . drwxr-xr-x 132 root root 12288 Aug 14 16:19 .. -rwxr-xr-x 1 root root 1478 May 25 2023 apt-compat -rwxr-xr-x 1 root root 123 Mar 26 2023 dpkg -rwxr-xr-x 1 root root 377 Dec 14 2022 logrotate -rwxr-xr-x 1 root root 1395 Mar 12 2023 man-db -rw-r--r-- 1 root root 102 Mar 2 2023 .placeholder -rwxr-xr-- 1 pi pi 1965 Aug 31 2021 thttpd-rotate pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ cat thttpd-rotate ### 2372 #!/bin/sh # /etc/cron.daily/thttpd-rotate cd /home/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 echo "log rotate end, thttpd pid = " `ps -C thttpd` >> thttpd_log w >> thttpd_log mv thttpd_log thttpd_log.01 date > thttpd_log echo "old log rotate end, old thttpd pid = " `ps -C thttpd` >> thttpd_log kill -usr1 `cat /var/run/thttpd.pid` sleep 15 echo "log rotate new, thttpd pid = " `ps -C thttpd` >> thttpd_log w >> thttpd_log # pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ # That looks better! there is a sleep 15 near the end and that is to wait for the new PID to be set up. ### 2452 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ # Notice that this program takes 15 seconds so that the new PID number will have time to come up. ### 2460 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ # Also, the lines are not written to the log file until they finish. The "kill -usr1 `cat /var/run/thttpd.pid`" stops thttpd from taking more requests. The "kill -usr1 `cat /var/run/thttpd.pid`" stops thttpd from taking any more requests but lets the ones that are running finish before it starts again with a new log file. That is why at times one will see extra lines after the log rotate normal ending. ### 2467 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ sudo ./thttpd-rotate ### sudo 2474 mv: cannot stat 'thttpd_log.49': No such file or directory mv: cannot stat 'thttpd_log.48': No such file or directory mv: cannot stat 'thttpd_log.47': No such file or directory mv: cannot stat 'thttpd_log.46': No such file or directory mv: cannot stat 'thttpd_log.45': No such file or directory mv: cannot stat 'thttpd_log.44': No such file or directory mv: cannot stat 'thttpd_log.43': No such file or directory mv: cannot stat 'thttpd_log.42': No such file or directory mv: cannot stat 'thttpd_log.41': No such file or directory mv: cannot stat 'thttpd_log.40': No such file or directory mv: cannot stat 'thttpd_log.39': No such file or directory mv: cannot stat 'thttpd_log.38': No such file or directory mv: cannot stat 'thttpd_log.37': No such file or directory mv: cannot stat 'thttpd_log.36': No such file or directory mv: cannot stat 'thttpd_log.35': No such file or directory mv: cannot stat 'thttpd_log.34': No such file or directory mv: cannot stat 'thttpd_log.33': No such file or directory mv: cannot stat 'thttpd_log.32': No such file or directory mv: cannot stat 'thttpd_log.31': No such file or directory mv: cannot stat 'thttpd_log.30': No such file or directory mv: cannot stat 'thttpd_log.29': No such file or directory mv: cannot stat 'thttpd_log.28': No such file or directory mv: cannot stat 'thttpd_log.27': No such file or directory mv: cannot stat 'thttpd_log.26': No such file or directory mv: cannot stat 'thttpd_log.25': No such file or directory mv: cannot stat 'thttpd_log.24': No such file or directory mv: cannot stat 'thttpd_log.23': No such file or directory mv: cannot stat 'thttpd_log.22': No such file or directory mv: cannot stat 'thttpd_log.21': No such file or directory mv: cannot stat 'thttpd_log.20': No such file or directory mv: cannot stat 'thttpd_log.19': No such file or directory mv: cannot stat 'thttpd_log.18': No such file or directory mv: cannot stat 'thttpd_log.17': No such file or directory mv: cannot stat 'thttpd_log.16': No such file or directory mv: cannot stat 'thttpd_log.15': No such file or directory mv: cannot stat 'thttpd_log.14': No such file or directory mv: cannot stat 'thttpd_log.13': No such file or directory mv: cannot stat 'thttpd_log.12': No such file or directory mv: cannot stat 'thttpd_log.11': No such file or directory mv: cannot stat 'thttpd_log.10': No such file or directory mv: cannot stat 'thttpd_log.09': No such file or directory mv: cannot stat 'thttpd_log.08': No such file or directory mv: cannot stat 'thttpd_log.07': No such file or directory mv: cannot stat 'thttpd_log.06': No such file or directory mv: cannot stat 'thttpd_log.05': No such file or directory mv: cannot stat 'thttpd_log.04': No such file or directory mv: cannot stat 'thttpd_log.03': No such file or directory mv: cannot stat 'thttpd_log.02': No such file or directory pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ sudo datelog ### 2530 sudo: datelog: command not found pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ # This is the problem when the command is entered from the command line and it is not in "/usr/local/sbin/" even though all of the other commands ran from "/home/local/sbin/"! ### 2536 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ sudo ls -al /home/local/sbin ### 2543 total 204 drwxr-xr-x 4 root root 4096 Aug 14 17:35 . drwxr-xr-x 5 root root 4096 Aug 14 15:19 .. -rwxr-xr-- 1 pi pi 185 Aug 31 2021 datelog -r-xr-xr-- 1 pi pi 185 Aug 31 2021 datelog~ -rwxr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd -r-xr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd~ -rwxr-xr-x 1 root root 72288 Aug 14 15:19 htpasswd -rwxr-sr-x 1 root www 71472 Aug 14 15:19 makeweb drwxr-xr-x 2 pi pi 4096 Jul 12 2022 os-debug -r-xr-xr-x 1 root root 2878 Aug 14 15:19 syslogtocern -r-xr-xr-x 1 bin bin 157808 Aug 14 15:19 thttpd drwxr-xr-x 3 pi pi 4096 Jul 12 2022 thttpd-extras -rwxr-xr-- 1 pi pi 153 Aug 31 2021 thttpd_wrapper pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ sudo cp -iav /home/local/sbin/* /usr/local/sbin ### sudo 2565 '/home/local/sbin/datelog' -> '/usr/local/sbin/datelog' '/home/local/sbin/datelog~' -> '/usr/local/sbin/datelog~' '/home/local/sbin/dead-thttpd' -> '/usr/local/sbin/dead-thttpd' '/home/local/sbin/dead-thttpd~' -> '/usr/local/sbin/dead-thttpd~' '/home/local/sbin/htpasswd' -> '/usr/local/sbin/htpasswd' '/home/local/sbin/makeweb' -> '/usr/local/sbin/makeweb' '/home/local/sbin/os-debug' -> '/usr/local/sbin/os-debug' '/home/local/sbin/os-debug/readme.txt~' -> '/usr/local/sbin/os-debug/readme.txt~' '/home/local/sbin/os-debug/thttpd-rotate' -> '/usr/local/sbin/os-debug/thttpd-rotate' '/home/local/sbin/os-debug/thttpd_wrapper~' -> '/usr/local/sbin/os-debug/thttpd_wrapper~' '/home/local/sbin/os-debug/dead-thttpd' -> '/usr/local/sbin/os-debug/dead-thttpd' '/home/local/sbin/os-debug/readme.txt' -> '/usr/local/sbin/os-debug/readme.txt' '/home/local/sbin/os-debug/dead-thttpd~' -> '/usr/local/sbin/os-debug/dead-thttpd~' '/home/local/sbin/os-debug/thttpd_wrapper' -> '/usr/local/sbin/os-debug/thttpd_wrapper' '/home/local/sbin/os-debug/datelog~' -> '/usr/local/sbin/os-debug/datelog~' '/home/local/sbin/os-debug/thttpd-rotate~' -> '/usr/local/sbin/os-debug/thttpd-rotate~' '/home/local/sbin/os-debug/datelog' -> '/usr/local/sbin/os-debug/datelog' '/home/local/sbin/syslogtocern' -> '/usr/local/sbin/syslogtocern' '/home/local/sbin/thttpd' -> '/usr/local/sbin/thttpd' '/home/local/sbin/thttpd-extras' -> '/usr/local/sbin/thttpd-extras' '/home/local/sbin/thttpd-extras/sitemap.xml' -> '/usr/local/sbin/thttpd-extras/sitemap.xml' '/home/local/sbin/thttpd-extras/thttpd-rotate' -> '/usr/local/sbin/thttpd-extras/thttpd-rotate' '/home/local/sbin/thttpd-extras/thttpd_wrapper~' -> '/usr/local/sbin/thttpd-extras/thttpd_wrapper~' '/home/local/sbin/thttpd-extras/readme.txt' -> '/usr/local/sbin/thttpd-extras/readme.txt' '/home/local/sbin/thttpd-extras/favicon.ico' -> '/usr/local/sbin/thttpd-extras/favicon.ico' '/home/local/sbin/thttpd-extras/vhost-DN-test' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test' '/home/local/sbin/thttpd-extras/vhost-DN-test/a0' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test/a0' '/home/local/sbin/thttpd-extras/vhost-DN-test/a0/test' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test/a0/test' '/home/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128' '/home/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128/a0' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128/a0' '/home/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128/a0/test' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128/a0/test' '/home/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128/sample.txt' -> '/usr/local/sbin/thttpd-extras/vhost-DN-test/192.168.1.128/sample.txt' '/home/local/sbin/thttpd-extras/robots.txt' -> '/usr/local/sbin/thttpd-extras/robots.txt' '/home/local/sbin/thttpd-extras/anvil_thttpd.gif' -> '/usr/local/sbin/thttpd-extras/anvil_thttpd.gif' '/home/local/sbin/thttpd-extras/thttpd_config~' -> '/usr/local/sbin/thttpd-extras/thttpd_config~' '/home/local/sbin/thttpd-extras/thttpd_wrapper' -> '/usr/local/sbin/thttpd-extras/thttpd_wrapper' '/home/local/sbin/thttpd-extras/rc.local' -> '/usr/local/sbin/thttpd-extras/rc.local' '/home/local/sbin/thttpd-extras/sitemap.xml.txt' -> '/usr/local/sbin/thttpd-extras/sitemap.xml.txt' '/home/local/sbin/thttpd-extras/thttpd.sh~' -> '/usr/local/sbin/thttpd-extras/thttpd.sh~' '/home/local/sbin/thttpd-extras/rc.local~' -> '/usr/local/sbin/thttpd-extras/rc.local~' '/home/local/sbin/thttpd-extras/thttpd.sh' -> '/usr/local/sbin/thttpd-extras/thttpd.sh' '/home/local/sbin/thttpd-extras/thttpd-rotate~' -> '/usr/local/sbin/thttpd-extras/thttpd-rotate~' '/home/local/sbin/thttpd-extras/robots-site.txt' -> '/usr/local/sbin/thttpd-extras/robots-site.txt' '/home/local/sbin/thttpd-extras/thttpd_config' -> '/usr/local/sbin/thttpd-extras/thttpd_config' '/home/local/sbin/thttpd_wrapper' -> '/usr/local/sbin/thttpd_wrapper' pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ ls -al /usr/local/sbin ### 2619 total 204 drwxr-xr-x 4 root root 4096 Aug 14 17:45 . drwxr-xr-x 10 root root 4096 May 12 18:04 .. -rwxr-xr-- 1 pi pi 185 Aug 31 2021 datelog -r-xr-xr-- 1 pi pi 185 Aug 31 2021 datelog~ -rwxr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd -r-xr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd~ -rwxr-xr-x 1 root root 72288 Aug 14 15:19 htpasswd -rwxr-sr-x 1 root www 71472 Aug 14 15:19 makeweb drwxr-xr-x 2 pi pi 4096 Jul 12 2022 os-debug -r-xr-xr-x 1 root root 2878 Aug 14 15:19 syslogtocern -r-xr-xr-x 1 bin bin 157808 Aug 14 15:19 thttpd drwxr-xr-x 3 pi pi 4096 Jul 12 2022 thttpd-extras -rwxr-xr-- 1 pi pi 153 Aug 31 2021 thttpd_wrapper pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ sudo datelog ### 2641 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ # Magic!! Now sudo datelog works!!! The only thing different is the command is coming from the command line and not from a program which all of the other commands come from and work without being under /usr/local/sbin/!!! ### 2645 pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ pi@raspberrypi:/etc/cron.daily $ cd /home/local/www/logs ### 2653 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ ls -al ### 2660 total 20 drwxr-xr-x 2 root www 4096 Aug 14 17:43 . drwxr-xr-x 5 root www 4096 Aug 14 16:28 .. -rw-r--r-- 1 nobody nogroup 1044 Aug 14 17:46 thttpd_log -rw-r--r-- 1 nobody nogroup 3770 Aug 14 17:43 thttpd_log.01 -rw-r--r-- 1 nobody nogroup 2016 Aug 14 16:59 thttpd_log.02 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cat *log.02 ### 2673 ::1 - - [14/Aug/2025:22:41:59 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" ::1 - - [14/Aug/2025:22:42:13 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://localhost/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" ::1 - - [14/Aug/2025:22:43:40 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" ::1 - - [14/Aug/2025:22:43:45 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://localhost/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:45:12 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:45:20 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:46:19 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:22:46:23 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.233 - - [14/Aug/2025:22:48:01 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:22:48:05 +0000] "GET /a0/ HTTP/1.1" 200 25000 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" Thu Aug 14 04:59:43 PM MDT 2025 16:59:43 up 2:25, 4 users, load average: 0.07, 0.08, 0.02 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 2:25m 1:18 0.49s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 2:25m 0.01s 0.01s -bash pi pts/4 - 16:36 23:10 3.85s ? sudo /home/local/sbin/thttpd -D -C /home/local/www/thttpd_config pi pts/6 - 16:59 0.00s 0.01s ? sudo ./thttpd-rotate pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cat *log.01 ### 2698 Thu Aug 14 04:59:43 PM MDT 2025 16:59:43 up 2:25, 4 users, load average: 0.07, 0.08, 0.02 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 2:25m 1:18 0.49s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 2:25m 0.01s 0.01s -bash pi pts/4 - 16:36 23:10 3.85s ? sudo /home/local/sbin/thttpd -D -C /home/local/www/thttpd_config pi pts/6 - 16:59 0.00s 0.01s ? sudo ./thttpd-rotate 192.168.1.223 - - [14/Aug/2025:23:23:54 +0000] "GET / HTTP/1.1" 200 25000 "" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:23:54 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:01 +0000] "GET /a0/ HTTP/1.1" 200 25000 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:30 +0000] "GET /readme.txt HTTP/1.1" 200 308 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:30 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.1.223/readme.txt" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:24:47 +0000] "GET /robots.txt HTTP/1.1" 200 27 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.223 - - [14/Aug/2025:23:26:42 +0000] "GET / HTTP/1.0" 200 25000 "" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:26:51 +0000] "GET /a0/ HTTP/1.0" 200 25000 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:27:00 +0000] "GET /favicon.ico HTTP/1.0" 200 533 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:27:05 +0000] "GET /readme.txt HTTP/1.0" 200 308 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.223 - - [14/Aug/2025:23:27:09 +0000] "GET /robots.txt HTTP/1.0" 200 27 "http://192.168.1.223/" "Lynx/2.9.0dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.8" 192.168.1.233 - - [14/Aug/2025:23:27:58 +0000] "GET / HTTP/1.1" 200 25000 "http://192.168.1.223/a0/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:04 +0000] "GET /a0/ HTTP/1.1" 200 25000 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:10 +0000] "GET /favicon.ico HTTP/1.1" 200 533 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:41 +0000] "GET /readme.txt HTTP/1.1" 200 308 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" 192.168.1.233 - - [14/Aug/2025:23:28:46 +0000] "GET /robots.txt HTTP/1.1" 200 27 "http://192.168.1.223/" "Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0" Thu Aug 14 05:43:23 PM MDT 2025 log rotate end, thttpd pid = PID TTY TIME CMD 17759 ? 00:00:03 thttpd 17:43:23 up 3:09, 3 users, load average: 0.01, 0.08, 0.08 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 3:09m 1:43 0.60s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 3:09m 0.01s 0.01s -bash pi pts/7 - 17:43 0.00s 0.02s ? sudo ./thttpd-rotate pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cat *log ### 2737 Thu Aug 14 05:43:23 PM MDT 2025 old log rotate end, old thttpd pid = PID TTY TIME CMD 17759 ? 00:00:03 thttpd log rotate new, thttpd pid = PID TTY TIME CMD 19714 ? 00:00:00 thttpd 17:43:38 up 3:09, 3 users, load average: 0.01, 0.07, 0.08 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 3:09m 1:43 0.60s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 3:09m 0.01s 0.01s -bash pi pts/7 - 17:43 15.00s 0.03s ? sudo ./thttpd-rotate datelog, thttpd pid = PID TTY TIME CMD 19714 ? 00:00:00 thttpd Thu Aug 14 05:46:26 PM MDT 2025 17:46:25 up 3:12, 3 users, load average: 0.03, 0.06, 0.08 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 14:34 3:12m 1:45 0.61s /usr/bin/lxsession -s LXDE-pi -e LXDE pi tty1 - 14:34 3:12m 0.01s 0.01s -bash pi pts/7 - 17:46 1.00s 0.01s ? sudo datelog pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ # As you can see thttpd can be updated while it is still running! ### 2760 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ # While it is still running I will finish with adding more "users" to the web site. ### 2766 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ date ### 2772 Thu Aug 14 05:48:50 PM MDT 2025 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ # ***************************** ### 2778 pi@raspberrypi:/home/local/www/logs $ # ***************************** ### 2779 pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ pi@raspberrypi:/home/local/www/logs $ cd /home/ ### 2785 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ date ### 2793 Thu Aug 14 05:54:06 PM MDT 2025 pi@raspberrypi:/home $ pi@raspberrypi:/home $ # At this point one can just add directories to "a0" if you just want to see what you may want for your permanent headers. Years ago my dial-up-ISP used "thttpd" to provide each user their own personal web site, by just entering "makeweb" into our user file (man makeweb). More information is in the "thttpd" documentation. When I started using thttpd I used my ham radio call sign "ac0xl" and that is why it has a lot of extra things in it. Since we created "a0" for the master used, that site is already working! pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ # Adding more Web Users, (Headings). ### 2799 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ # 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. ### 2803 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ addgroup --help ### 2809 adduser [--uid id] [--firstuid id] [--lastuid id] [--gid id] [--firstgid id] [--lastgid id] [--ingroup group] [--add-extra-groups] [--shell shell] [--comment comment] [--home dir] [--no-create-home] [--allow-all-names] [--allow-bad-names] [--disabled-password] [--disabled-login] [--conf file] [--quiet] [--verbose] [--debug] user Add a normal user adduser --system [--uid id] [--group] [--ingroup group] [--gid id] [--shell shell] [--comment comment] [--home dir] [--no-create-home] [--conf file] [--quiet] [--verbose] [--debug] user Add a system user adduser --group [--gid ID] [--firstgid id] [--lastgid id] [--conf file] [--quiet] [--verbose] [--debug] group addgroup [--gid ID] [--firstgid id] [--lastgid id] [--conf file] [--quiet] [--verbose] [--debug] group Add a user group addgroup --system [--gid id] [--conf file] [--quiet] [--verbose] [--debug] group Add a system group adduser USER GROUP Add an existing user to an existing group pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ # This is where if you have a list of typed "users" you can just copy the "name" and then be able to paste it several times without having to retype it, or making typing mistakes. I made the file "list.txt" in the freedom directory. ### 2851 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ cat ~/freedom/adding-users.txt ### 2858 adding-users.txt ### 4286 # # Again the process: ### 2862 # # sudo adduser --ingroup www videos # (new web user "videos") # (use a password that is different from the one for "(pi)") # su videos # (shell to user "videos") # cd # (change to shell home directory) # touch .user-number # that is a period and the number all in one, (.user-number) # makeweb # ls -al # exit # (exit the shell back to where you were) # # # ********* # pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ # ********* ### 2881 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ cat ~/freedom/list.txt ### 2888 list.txt a0 documents downloads memes music notices pictures videos sudo adduser --ingroup www xxxx su xxxx cd touch .number makeweb ls -al exit sudo adduser --ingroup www xxxx a0 ac0xl delinquent-accounts documents downloads freedom memes music notices pictures rome searles-sav-on-propane va videos welding fraud rifle-union-high-rifle-colorado * pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ # I am going to use my list from the bottom and one should place their list in a separate window. ### 2911 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ date ### 2918 Thu Aug 14 06:01:33 PM MDT 2025 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www ac0xl ### sudo 2826 Adding user `ac0xl' ... Adding new user `ac0xl' (1002) with group `www (123)' ... 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 []: ac0xl Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `ac0xl' to supplemental / extra groups `users' ... Adding user `ac0xl' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su ac0xl ### 2950 Password: ac0xl@raspberrypi:/home $ ac0xl@raspberrypi:/home $ ac0xl@raspberrypi:/home $ cd ac0xl@raspberrypi:~ $ ac0xl@raspberrypi:~ $ touch .1002 ac0xl@raspberrypi:~ $ ac0xl@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/ac0xl Created symbolic link /home/ac0xl/public_html ac0xl@raspberrypi:~ $ ac0xl@raspberrypi:~ $ ac0xl@raspberrypi:~ $ ls -al total 28 drwx------ 2 ac0xl www 4096 Aug 14 18:05 . drwxr-xr-x 6 root root 4096 Aug 14 18:02 .. -rw-r--r-- 1 ac0xl www 0 Aug 14 18:05 .1002 -rw-r--r-- 1 ac0xl www 220 Aug 14 18:02 .bash_logout -rw-r--r-- 1 ac0xl www 3523 Aug 14 18:02 .bashrc -rw-r--r-- 1 ac0xl www 5290 Aug 14 18:02 .face lrwxrwxrwx 1 ac0xl www 5 Aug 14 18:02 .face.icon -> .face -rw-r--r-- 1 ac0xl www 807 Aug 14 18:02 .profile lrwxrwxrwx 1 ac0xl www 27 Aug 14 18:05 public_html -> /home/local/www/users/ac0xl ac0xl@raspberrypi:~ $ ac0xl@raspberrypi:~ $ ac0xl@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ date ### 2995 Thu Aug 14 06:14:07 PM MDT 2025 pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www delinquent-accounts ### 3003 Adding user `delinquent-accounts' ... Adding new user `delinquent-accounts' (1003) with group `www (123)' ... Creating home directory `/home/delinquent-accounts' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for delinquent-accounts Enter the new value, or press ENTER for the default Full Name []: delinquent-accounts Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `delinquent-accounts' to supplemental / extra groups `users' ... Adding user `delinquent-accounts' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su delinquent-accounts ### 3027 Password: delinquent-accounts@raspberrypi:/home $ delinquent-accounts@raspberrypi:/home $ delinquent-accounts@raspberrypi:/home $ cd delinquent-accounts@raspberrypi:~ $ touch .1003 delinquent-accounts@raspberrypi:~ $ delinquent-accounts@raspberrypi:~ $ delinquent-accounts@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/delinquent-accounts Created symbolic link /home/delinquent-accounts/public_html delinquent-accounts@raspberrypi:~ $ delinquent-accounts@raspberrypi:~ $ delinquent-accounts@raspberrypi:~ $ ls -al total 28 drwx------ 2 delinquent-accounts www 4096 Aug 14 18:16 . drwxr-xr-x 7 root root 4096 Aug 14 18:14 .. -rw-r--r-- 1 delinquent-accounts www 0 Aug 14 18:15 .1003 -rw-r--r-- 1 delinquent-accounts www 220 Aug 14 18:14 .bash_logout -rw-r--r-- 1 delinquent-accounts www 3523 Aug 14 18:14 .bashrc -rw-r--r-- 1 delinquent-accounts www 5290 Aug 14 18:14 .face lrwxrwxrwx 1 delinquent-accounts www 5 Aug 14 18:14 .face.icon -> .face -rw-r--r-- 1 delinquent-accounts www 807 Aug 14 18:14 .profile lrwxrwxrwx 1 delinquent-accounts www 41 Aug 14 18:16 public_html -> /home/local/www/users/delinquent-accounts delinquent-accounts@raspberrypi:~ $ delinquent-accounts@raspberrypi:~ $ delinquent-accounts@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www documents ### 3072 Adding user `documents' ... Adding new user `documents' (1004) with group `www (123)' ... Creating home directory `/home/documents' ... Copying files from `/etc/skel' ... New password: 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 Adding new user `documents' to supplemental / extra groups `users' ... Adding user `documents' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su documents ### 3096 Password: documents@raspberrypi:/home $ documents@raspberrypi:/home $ documents@raspberrypi:/home $ cd documents@raspberrypi:~ $ documents@raspberrypi:~ $ documents@raspberrypi:~ $ touch .1004 documents@raspberrypi:~ $ documents@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/documents Created symbolic link /home/documents/public_html documents@raspberrypi:~ $ documents@raspberrypi:~ $ documents@raspberrypi:~ $ ls -al total 28 drwx------ 2 documents www 4096 Aug 14 18:18 . drwxr-xr-x 8 root root 4096 Aug 14 18:16 .. -rw-r--r-- 1 documents www 0 Aug 14 18:18 .1004 -rw-r--r-- 1 documents www 220 Aug 14 18:16 .bash_logout -rw-r--r-- 1 documents www 3523 Aug 14 18:16 .bashrc -rw-r--r-- 1 documents www 5290 Aug 14 18:16 .face lrwxrwxrwx 1 documents www 5 Aug 14 18:16 .face.icon -> .face -rw-r--r-- 1 documents www 807 Aug 14 18:16 .profile lrwxrwxrwx 1 documents www 31 Aug 14 18:18 public_html -> /home/local/www/users/documents documents@raspberrypi:~ $ documents@raspberrypi:~ $ documents@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www downloads ### 3142 Adding user `downloads' ... Adding new user `downloads' (1005) with group `www (123)' ... Creating home directory `/home/downloads' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for downloads Enter the new value, or press ENTER for the default Full Name []: downloads Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `downloads' to supplemental / extra groups `users' ... Adding user `downloads' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su downloads ### 3166 Password: downloads@raspberrypi:/home $ downloads@raspberrypi:/home $ downloads@raspberrypi:/home $ downloads@raspberrypi:/home $ cd downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ touch .1005 downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/downloads Created symbolic link /home/downloads/public_html downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ ls -al total 28 drwx------ 2 downloads www 4096 Aug 14 18:20 . drwxr-xr-x 9 root root 4096 Aug 14 18:19 .. -rw-r--r-- 1 downloads www 0 Aug 14 18:20 .1005 -rw-r--r-- 1 downloads www 220 Aug 14 18:19 .bash_logout -rw-r--r-- 1 downloads www 3523 Aug 14 18:19 .bashrc -rw-r--r-- 1 downloads www 5290 Aug 14 18:19 .face lrwxrwxrwx 1 downloads www 5 Aug 14 18:19 .face.icon -> .face -rw-r--r-- 1 downloads www 807 Aug 14 18:19 .profile lrwxrwxrwx 1 downloads www 31 Aug 14 18:20 public_html -> /home/local/www/users/downloads downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ downloads@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www freedom ### 3213 Adding user `freedom' ... Adding new user `freedom' (1006) with group `www (123)' ... Creating home directory `/home/freedom' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for freedom Enter the new value, or press ENTER for the default Full Name []: freedom Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `freedom' to supplemental / extra groups `users' ... Adding user `freedom' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su freedom ### 3236 Password: freedom@raspberrypi:/home $ freedom@raspberrypi:/home $ freedom@raspberrypi:/home $ cd freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ touch .1006 freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/freedom Created symbolic link /home/freedom/public_html freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ ls -al total 28 drwx------ 2 freedom www 4096 Aug 14 18:22 . drwxr-xr-x 10 root root 4096 Aug 14 18:21 .. -rw-r--r-- 1 freedom www 0 Aug 14 18:22 .1006 -rw-r--r-- 1 freedom www 220 Aug 14 18:21 .bash_logout -rw-r--r-- 1 freedom www 3523 Aug 14 18:21 .bashrc -rw-r--r-- 1 freedom www 5290 Aug 14 18:21 .face lrwxrwxrwx 1 freedom www 5 Aug 14 18:21 .face.icon -> .face -rw-r--r-- 1 freedom www 807 Aug 14 18:21 .profile lrwxrwxrwx 1 freedom www 29 Aug 14 18:22 public_html -> /home/local/www/users/freedom freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ freedom@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www memes ### 3282 Adding user `memes' ... Adding new user `memes' (1007) with group `www (123)' ... Creating home directory `/home/memes' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for memes Enter the new value, or press ENTER for the default Full Name []: memes Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `memes' to supplemental / extra groups `users' ... Adding user `memes' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su memes ### 3305 Password: memes@raspberrypi:/home $ memes@raspberrypi:/home $ memes@raspberrypi:/home $ cd memes@raspberrypi:~ $ memes@raspberrypi:~ $ touch .1007 memes@raspberrypi:~ $ memes@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/memes Created symbolic link /home/memes/public_html memes@raspberrypi:~ $ memes@raspberrypi:~ $ memes@raspberrypi:~ $ ls -al total 28 drwx------ 2 memes www 4096 Aug 14 18:23 . drwxr-xr-x 11 root root 4096 Aug 14 18:22 .. -rw-r--r-- 1 memes www 0 Aug 14 18:23 .1007 -rw-r--r-- 1 memes www 220 Aug 14 18:22 .bash_logout -rw-r--r-- 1 memes www 3523 Aug 14 18:22 .bashrc -rw-r--r-- 1 memes www 5290 Aug 14 18:22 .face lrwxrwxrwx 1 memes www 5 Aug 14 18:22 .face.icon -> .face -rw-r--r-- 1 memes www 807 Aug 14 18:22 .profile lrwxrwxrwx 1 memes www 27 Aug 14 18:23 public_html -> /home/local/www/users/memes memes@raspberrypi:~ $ memes@raspberrypi:~ $ memes@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www music ### 3350 Adding user `music' ... Adding new user `music' (1008) with group `www (123)' ... Creating home directory `/home/music' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for music Enter the new value, or press ENTER for the default Full Name []: music Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `music' to supplemental / extra groups `users' ... Adding user `music' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su music ### 3373 Password: music@raspberrypi:/home $ music@raspberrypi:/home $ cd music@raspberrypi:~ $ music@raspberrypi:~ $ music@raspberrypi:~ $ touch .1008 music@raspberrypi:~ $ music@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/music Created symbolic link /home/music/public_html music@raspberrypi:~ $ music@raspberrypi:~ $ music@raspberrypi:~ $ ls -al total 28 drwx------ 2 music www 4096 Aug 14 18:26 . drwxr-xr-x 12 root root 4096 Aug 14 18:24 .. -rw-r--r-- 1 music www 0 Aug 14 18:26 .1008 -rw-r--r-- 1 music www 220 Aug 14 18:24 .bash_logout -rw-r--r-- 1 music www 3523 Aug 14 18:24 .bashrc -rw-r--r-- 1 music www 5290 Aug 14 18:24 .face lrwxrwxrwx 1 music www 5 Aug 14 18:24 .face.icon -> .face -rw-r--r-- 1 music www 807 Aug 14 18:24 .profile lrwxrwxrwx 1 music www 27 Aug 14 18:26 public_html -> /home/local/www/users/music music@raspberrypi:~ $ music@raspberrypi:~ $ music@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www notices ### 3418 Adding user `notices' ... Adding new user `notices' (1009) with group `www (123)' ... Creating home directory `/home/notices' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for notices Enter the new value, or press ENTER for the default Full Name []: notices Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `notices' to supplemental / extra groups `users' ... Adding user `notices' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su notices ### 3441 Password: notices@raspberrypi:/home $ notices@raspberrypi:/home $ notices@raspberrypi:/home $ cd notices@raspberrypi:~ $ notices@raspberrypi:~ $ touch .1009 notices@raspberrypi:~ $ notices@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/notices Created symbolic link /home/notices/public_html notices@raspberrypi:~ $ notices@raspberrypi:~ $ notices@raspberrypi:~ $ ls -al total 28 drwx------ 2 notices www 4096 Aug 14 18:28 . drwxr-xr-x 13 root root 4096 Aug 14 18:26 .. -rw-r--r-- 1 notices www 0 Aug 14 18:27 .1009 -rw-r--r-- 1 notices www 220 Aug 14 18:26 .bash_logout -rw-r--r-- 1 notices www 3523 Aug 14 18:26 .bashrc -rw-r--r-- 1 notices www 5290 Aug 14 18:26 .face lrwxrwxrwx 1 notices www 5 Aug 14 18:26 .face.icon -> .face -rw-r--r-- 1 notices www 807 Aug 14 18:26 .profile lrwxrwxrwx 1 notices www 29 Aug 14 18:28 public_html -> /home/local/www/users/notices notices@raspberrypi:~ $ notices@raspberrypi:~ $ notices@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www pictures ### 3485 Adding user `pictures' ... Adding new user `pictures' (1010) with group `www (123)' ... Creating home directory `/home/pictures' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for pictures Enter the new value, or press ENTER for the default Full Name []: pictures Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `pictures' to supplemental / extra groups `users' ... Adding user `pictures' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su pictures ### 3509 Password: pictures@raspberrypi:/home $ pictures@raspberrypi:/home $ pictures@raspberrypi:/home $ cd pictures@raspberrypi:~ $ pictures@raspberrypi:~ $ touch .1010 pictures@raspberrypi:~ $ pictures@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/pictures Created symbolic link /home/pictures/public_html pictures@raspberrypi:~ $ pictures@raspberrypi:~ $ pictures@raspberrypi:~ $ ls -al total 28 drwx------ 2 pictures www 4096 Aug 14 18:29 . drwxr-xr-x 14 root root 4096 Aug 14 18:28 .. -rw-r--r-- 1 pictures www 0 Aug 14 18:29 .1010 -rw-r--r-- 1 pictures www 220 Aug 14 18:28 .bash_logout -rw-r--r-- 1 pictures www 3523 Aug 14 18:28 .bashrc -rw-r--r-- 1 pictures www 5290 Aug 14 18:28 .face lrwxrwxrwx 1 pictures www 5 Aug 14 18:28 .face.icon -> .face -rw-r--r-- 1 pictures www 807 Aug 14 18:28 .profile lrwxrwxrwx 1 pictures www 30 Aug 14 18:29 public_html -> /home/local/www/users/pictures pictures@raspberrypi:~ $ pictures@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www rome ### 3553 Adding user `rome' ... Adding new user `rome' (1011) with group `www (123)' ... Creating home directory `/home/rome' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for rome Enter the new value, or press ENTER for the default Full Name []: rome Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `rome' to supplemental / extra groups `users' ... Adding user `rome' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su rome ### 3576 Password: rome@raspberrypi:/home $ rome@raspberrypi:/home $ rome@raspberrypi:/home $ cd rome@raspberrypi:~ $ rome@raspberrypi:~ $ touch .1011 rome@raspberrypi:~ $ rome@raspberrypi:~ $ rome@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/rome Created symbolic link /home/rome/public_html rome@raspberrypi:~ $ rome@raspberrypi:~ $ rome@raspberrypi:~ $ ls -al total 28 drwx------ 2 rome www 4096 Aug 14 18:32 . drwxr-xr-x 15 root root 4096 Aug 14 18:30 .. -rw-r--r-- 1 rome www 0 Aug 14 18:31 .1011 -rw-r--r-- 1 rome www 220 Aug 14 18:30 .bash_logout -rw-r--r-- 1 rome www 3523 Aug 14 18:30 .bashrc -rw-r--r-- 1 rome www 5290 Aug 14 18:30 .face lrwxrwxrwx 1 rome www 5 Aug 14 18:30 .face.icon -> .face -rw-r--r-- 1 rome www 807 Aug 14 18:30 .profile lrwxrwxrwx 1 rome www 26 Aug 14 18:32 public_html -> /home/local/www/users/rome rome@raspberrypi:~ $ rome@raspberrypi:~ $ rome@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www searles-sav-on-propane ### 3622 Adding user `searles-sav-on-propane' ... Adding new user `searles-sav-on-propane' (1012) with group `www (123)' ... Creating home directory `/home/searles-sav-on-propane' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for searles-sav-on-propane Enter the new value, or press ENTER for the default Full Name []: searles-sav-on-propane Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `searles-sav-on-propane' to supplemental / extra groups `users' ... Adding user `searles-sav-on-propane' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su searles-sav-on-propane ### 3645 Password: searles-sav-on-propane@raspberrypi:/home $ searles-sav-on-propane@raspberrypi:/home $ searles-sav-on-propane@raspberrypi:/home $ cd searles-sav-on-propane@raspberrypi:~ $ searles-sav-on-propane@raspberrypi:~ $ touch .1012 searles-sav-on-propane@raspberrypi:~ $ searles-sav-on-propane@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/searles-sav-on-propane Created symbolic link /home/searles-sav-on-propane/public_html searles-sav-on-propane@raspberrypi:~ $ searles-sav-on-propane@raspberrypi:~ $ searles-sav-on-propane@raspberrypi:~ $ ls -al total 28 drwx------ 2 searles-sav-on-propane www 4096 Aug 14 18:34 . drwxr-xr-x 16 root root 4096 Aug 14 18:32 .. -rw-r--r-- 1 searles-sav-on-propane www 0 Aug 14 18:33 .1012 -rw-r--r-- 1 searles-sav-on-propane www 220 Aug 14 18:32 .bash_logout -rw-r--r-- 1 searles-sav-on-propane www 3523 Aug 14 18:32 .bashrc -rw-r--r-- 1 searles-sav-on-propane www 5290 Aug 14 18:32 .face lrwxrwxrwx 1 searles-sav-on-propane www 5 Aug 14 18:32 .face.icon -> .face -rw-r--r-- 1 searles-sav-on-propane www 807 Aug 14 18:32 .profile lrwxrwxrwx 1 searles-sav-on-propane www 44 Aug 14 18:34 public_html -> /home/local/www/users/searles-sav-on-propane searles-sav-on-propane@raspberrypi:~ $ searles-sav-on-propane@raspberrypi:~ $ searles-sav-on-propane@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www va ### 3690 Adding user `va' ... Adding new user `va' (1013) with group `www (123)' ... Creating home directory `/home/va' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for va Enter the new value, or press ENTER for the default Full Name []: va Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `va' to supplemental / extra groups `users' ... Adding user `va' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su va ### 3714 Password: va@raspberrypi:/home $ va@raspberrypi:/home $ va@raspberrypi:/home $ cd va@raspberrypi:~ $ va@raspberrypi:~ $ touch .1013 va@raspberrypi:~ $ va@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/va Created symbolic link /home/va/public_html va@raspberrypi:~ $ va@raspberrypi:~ $ va@raspberrypi:~ $ ls -al total 28 drwx------ 2 va www 4096 Aug 14 18:35 . drwxr-xr-x 17 root root 4096 Aug 14 18:34 .. -rw-r--r-- 1 va www 0 Aug 14 18:35 .1013 -rw-r--r-- 1 va www 220 Aug 14 18:34 .bash_logout -rw-r--r-- 1 va www 3523 Aug 14 18:34 .bashrc -rw-r--r-- 1 va www 5290 Aug 14 18:34 .face lrwxrwxrwx 1 va www 5 Aug 14 18:34 .face.icon -> .face -rw-r--r-- 1 va www 807 Aug 14 18:34 .profile lrwxrwxrwx 1 va www 24 Aug 14 18:35 public_html -> /home/local/www/users/va va@raspberrypi:~ $ va@raspberrypi:~ $ va@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www videos ### 3759 Adding user `videos' ... Adding new user `videos' (1014) with group `www (123)' ... Creating home directory `/home/videos' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for videos Enter the new value, or press ENTER for the default Full Name []: videos Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `videos' to supplemental / extra groups `users' ... Adding user `videos' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su videos ### 3783 Password: videos@raspberrypi:/home $ videos@raspberrypi:/home $ videos@raspberrypi:/home $ cd videos@raspberrypi:~ $ videos@raspberrypi:~ $ touch .1014 videos@raspberrypi:~ $ videos@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/videos Created symbolic link /home/videos/public_html videos@raspberrypi:~ $ videos@raspberrypi:~ $ videos@raspberrypi:~ $ ls -al total 28 drwx------ 2 videos www 4096 Aug 14 18:37 . drwxr-xr-x 18 root root 4096 Aug 14 18:36 .. -rw-r--r-- 1 videos www 0 Aug 14 18:37 .1014 -rw-r--r-- 1 videos www 220 Aug 14 18:36 .bash_logout -rw-r--r-- 1 videos www 3523 Aug 14 18:36 .bashrc -rw-r--r-- 1 videos www 5290 Aug 14 18:36 .face lrwxrwxrwx 1 videos www 5 Aug 14 18:36 .face.icon -> .face -rw-r--r-- 1 videos www 807 Aug 14 18:36 .profile lrwxrwxrwx 1 videos www 28 Aug 14 18:37 public_html -> /home/local/www/users/videos videos@raspberrypi:~ $ videos@raspberrypi:~ $ videos@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www welding ### 3828 Adding user `welding' ... Adding new user `welding' (1015) with group `www (123)' ... Creating home directory `/home/welding' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for welding Enter the new value, or press ENTER for the default Full Name []: welding Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `welding' to supplemental / extra groups `users' ... Adding user `welding' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su welding ### 3852 Password: welding@raspberrypi:/home $ welding@raspberrypi:/home $ welding@raspberrypi:/home $ cd welding@raspberrypi:~ $ welding@raspberrypi:~ $ touch .1015 welding@raspberrypi:~ $ welding@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/welding Created symbolic link /home/welding/public_html welding@raspberrypi:~ $ welding@raspberrypi:~ $ welding@raspberrypi:~ $ ls -al total 28 drwx------ 2 welding www 4096 Aug 14 18:39 . drwxr-xr-x 19 root root 4096 Aug 14 18:38 .. -rw-r--r-- 1 welding www 0 Aug 14 18:39 .1015 -rw-r--r-- 1 welding www 220 Aug 14 18:38 .bash_logout -rw-r--r-- 1 welding www 3523 Aug 14 18:38 .bashrc -rw-r--r-- 1 welding www 5290 Aug 14 18:38 .face lrwxrwxrwx 1 welding www 5 Aug 14 18:38 .face.icon -> .face -rw-r--r-- 1 welding www 807 Aug 14 18:38 .profile lrwxrwxrwx 1 welding www 29 Aug 14 18:39 public_html -> /home/local/www/users/welding welding@raspberrypi:~ $ welding@raspberrypi:~ $ welding@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www fraud ### 3897 Adding user `fraud' ... Adding new user `fraud' (1016) with group `www (123)' ... Creating home directory `/home/fraud' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for fraud Enter the new value, or press ENTER for the default Full Name []: fraud Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `fraud' to supplemental / extra groups `users' ... Adding user `fraud' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su fraud ### 3920 Password: fraud@raspberrypi:/home $ fraud@raspberrypi:/home $ fraud@raspberrypi:/home $ cd fraud@raspberrypi:~ $ fraud@raspberrypi:~ $ touch .1916 fraud@raspberrypi:~ $ fraud@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/fraud Created symbolic link /home/fraud/public_html fraud@raspberrypi:~ $ fraud@raspberrypi:~ $ fraud@raspberrypi:~ $ ls -al total 28 drwx------ 2 fraud www 4096 Aug 14 18:41 . drwxr-xr-x 20 root root 4096 Aug 14 18:40 .. -rw-r--r-- 1 fraud www 0 Aug 14 18:41 .1916 -rw-r--r-- 1 fraud www 220 Aug 14 18:40 .bash_logout -rw-r--r-- 1 fraud www 3523 Aug 14 18:40 .bashrc -rw-r--r-- 1 fraud www 5290 Aug 14 18:40 .face lrwxrwxrwx 1 fraud www 5 Aug 14 18:40 .face.icon -> .face -rw-r--r-- 1 fraud www 807 Aug 14 18:40 .profile lrwxrwxrwx 1 fraud www 27 Aug 14 18:41 public_html -> /home/local/www/users/fraud fraud@raspberrypi:~ $ fraud@raspberrypi:~ $ fraud@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ sudo adduser --ingroup www rifle-union-high-rifle-colorado ### 3965 Adding user `rifle-union-high-rifle-colorado' ... Adding new user `rifle-union-high-rifle-colorado' (1017) with group `www (123)' ... Creating home directory `/home/rifle-union-high-rifle-colorado' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for rifle-union-high-rifle-colorado Enter the new value, or press ENTER for the default Full Name []: rifle-union-high-rifle-colorado Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y Adding new user `rifle-union-high-rifle-colorado' to supplemental / extra groups `users' ... Adding user `rifle-union-high-rifle-colorado' to group `users' ... pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ su rifle-union-high-rifle-colorado 3989 Password: rifle-union-high-rifle-colorado@raspberrypi:/home $ rifle-union-high-rifle-colorado@raspberrypi:/home $ rifle-union-high-rifle-colorado@raspberrypi:/home $ cd rifle-union-high-rifle-colorado@raspberrypi:~ $ rifle-union-high-rifle-colorado@raspberrypi:~ $ touch .1017 rifle-union-high-rifle-colorado@raspberrypi:~ $ rifle-union-high-rifle-colorado@raspberrypi:~ $ makeweb Created web directory /home/local/www/users/rifle-union-high-rifle-colorado Created symbolic link /home/rifle-union-high-rifle-colorado/public_html rifle-union-high-rifle-colorado@raspberrypi:~ $ rifle-union-high-rifle-colorado@raspberrypi:~ $ ls -al total 28 drwx------ 2 rifle-union-high-rifle-colorado www 4096 Aug 14 18:43 . drwxr-xr-x 21 root root 4096 Aug 14 18:42 .. -rw-r--r-- 1 rifle-union-high-rifle-colorado www 0 Aug 14 18:43 .1017 -rw-r--r-- 1 rifle-union-high-rifle-colorado www 220 Aug 14 18:42 .bash_logout -rw-r--r-- 1 rifle-union-high-rifle-colorado www 3523 Aug 14 18:42 .bashrc -rw-r--r-- 1 rifle-union-high-rifle-colorado www 5290 Aug 14 18:42 .face lrwxrwxrwx 1 rifle-union-high-rifle-colorado www 5 Aug 14 18:42 .face.icon -> .face -rw-r--r-- 1 rifle-union-high-rifle-colorado www 807 Aug 14 18:42 .profile lrwxrwxrwx 1 rifle-union-high-rifle-colorado www 53 Aug 14 18:43 public_html -> /home/local/www/users/rifle-union-high-rifle-colorado rifle-union-high-rifle-colorado@raspberrypi:~ $ rifle-union-high-rifle-colorado@raspberrypi:~ $ rifle-union-high-rifle-colorado@raspberrypi:~ $ exit exit pi@raspberrypi:/home $ pi@raspberrypi:/home $ date ### 4030 Thu Aug 14 06:43:46 PM MDT 2025 pi@raspberrypi:/home $ pi@raspberrypi:/home $ ls -al ### 4035 total 84 drwxr-xr-x 21 root root 4096 Aug 14 18:42 . drwxr-xr-x 18 root root 4096 May 12 18:17 .. drwx------ 2 a0 www 4096 Aug 14 15:46 a0 drwx------ 2 ac0xl www 4096 Aug 14 18:06 ac0xl drwx------ 2 delinquent-accounts www 4096 Aug 14 18:16 delinquent-accounts drwx------ 2 documents www 4096 Aug 14 18:18 documents drwx------ 2 downloads www 4096 Aug 14 18:20 downloads drwx------ 2 fraud www 4096 Aug 14 18:41 fraud drwx------ 2 freedom www 4096 Aug 14 18:22 freedom drwxr-xr-x 5 root root 4096 Aug 14 15:19 local drwx------ 2 memes www 4096 Aug 14 18:24 memes drwx------ 2 music www 4096 Aug 14 18:26 music drwx------ 2 notices www 4096 Aug 14 18:28 notices drwx------ 18 pi pi 4096 Aug 14 17:52 pi drwx------ 2 pictures www 4096 Aug 14 18:30 pictures drwx------ 2 rifle-union-high-rifle-colorado www 4096 Aug 14 18:43 rifle-union-high-rifle-colorado drwx------ 2 rome www 4096 Aug 14 18:32 rome drwx------ 2 searles-sav-on-propane www 4096 Aug 14 18:34 searles-sav-on-propane drwx------ 2 va www 4096 Aug 14 18:36 va drwx------ 2 videos www 4096 Aug 14 18:37 videos drwx------ 2 welding www 4096 Aug 14 18:39 welding pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ pi@raspberrypi:/home $ cd /home/local/www/users ### 4065 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ ls -al ### 4072 total 88 drwxrwxr-x 19 root www 4096 Aug 14 18:43 . drwxr-xr-x 5 root www 4096 Aug 14 16:28 .. drwxr-xr-x 2 a0 www 4096 Aug 14 15:39 a0 drwxr-xr-x 2 ac0xl www 4096 Aug 14 18:05 ac0xl drwxr-xr-x 2 delinquent-accounts www 4096 Aug 14 18:16 delinquent-accounts drwxr-xr-x 2 documents www 4096 Aug 14 18:18 documents drwxr-xr-x 2 downloads www 4096 Aug 14 18:20 downloads -rw-r--r-- 1 pi pi 533 Jan 8 2020 favicon.ico drwxr-xr-x 2 fraud www 4096 Aug 14 18:41 fraud drwxr-xr-x 2 freedom www 4096 Aug 14 18:22 freedom drwxr-xr-x 2 memes www 4096 Aug 14 18:23 memes drwxr-xr-x 2 music www 4096 Aug 14 18:26 music drwxr-xr-x 2 notices www 4096 Aug 14 18:28 notices drwxr-xr-x 2 pictures www 4096 Aug 14 18:29 pictures -rw-r--r-- 1 pi pi 308 Aug 13 2021 readme.txt drwxr-xr-x 2 rifle-union-high-rifle-colorado www 4096 Aug 14 18:43 rifle-union-high-rifle-colorado -rw-r--r-- 1 pi pi 27 Jan 8 2020 robots.txt drwxr-xr-x 2 rome www 4096 Aug 14 18:32 rome drwxr-xr-x 2 searles-sav-on-propane www 4096 Aug 14 18:34 searles-sav-on-propane drwxr-xr-x 2 va www 4096 Aug 14 18:35 va drwxr-xr-x 2 videos www 4096 Aug 14 18:37 videos drwxr-xr-x 2 welding www 4096 Aug 14 18:39 welding pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ date ### 4101 Thu Aug 14 06:47:07 PM MDT 2025 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ df -H ### 4109 Filesystem Size Used Avail Use% Mounted on udev 4.2G 0 4.2G 0% /dev tmpfs 846M 15M 831M 2% /run /dev/mmcblk0p2 244G 6.4G 225G 3% / tmpfs 4.3G 33k 4.3G 1% /dev/shm tmpfs 5.3M 50k 5.2M 1% /run/lock /dev/mmcblk0p1 535M 72M 464M 14% /boot/firmware tmpfs 846M 263k 845M 1% /run/user/1000 pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ pi@raspberrypi:/home/local/www/users $ cd ### 4123 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ps -e ### 4130 PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 pool_workqueue_release 4 ? 00:00:00 kworker/R-kvfree_rcu_reclaim 5 ? 00:00:00 kworker/R-rcu_gp 6 ? 00:00:00 kworker/R-sync_wq 7 ? 00:00:00 kworker/R-slub_flushwq 8 ? 00:00:00 kworker/R-netns 13 ? 00:00:00 kworker/R-mm_percpu_wq 14 ? 00:00:00 rcu_tasks_kthread 15 ? 00:00:00 rcu_tasks_rude_kthread 16 ? 00:00:00 rcu_tasks_trace_kthread 17 ? 00:00:00 ksoftirqd/0 18 ? 00:00:01 rcu_preempt 19 ? 00:00:00 rcu_exp_par_gp_kthread_worker/0 20 ? 00:00:00 rcu_exp_gp_kthread_worker 21 ? 00:00:00 migration/0 22 ? 00:00:00 cpuhp/0 23 ? 00:00:00 cpuhp/1 24 ? 00:00:00 migration/1 25 ? 00:00:00 ksoftirqd/1 28 ? 00:00:00 cpuhp/2 29 ? 00:00:00 migration/2 30 ? 00:00:00 ksoftirqd/2 33 ? 00:00:00 cpuhp/3 34 ? 00:00:00 migration/3 35 ? 00:00:00 ksoftirqd/3 42 ? 00:00:00 kdevtmpfs 43 ? 00:00:00 kworker/R-inet_frag_wq 44 ? 00:00:00 kauditd 45 ? 00:00:00 khungtaskd 46 ? 00:00:00 oom_reaper 48 ? 00:00:00 kworker/R-writeback 49 ? 00:00:00 kcompactd0 50 ? 00:00:00 kcompactd1 51 ? 00:00:00 kcompactd2 52 ? 00:00:00 kcompactd3 53 ? 00:00:00 kcompactd4 54 ? 00:00:00 kcompactd5 55 ? 00:00:00 kcompactd6 56 ? 00:00:00 kcompactd7 57 ? 00:00:00 kworker/R-kintegrityd 58 ? 00:00:00 kworker/R-kblockd 59 ? 00:00:00 kworker/R-blkcg_punt_bio 62 ? 00:00:00 watchdogd 65 ? 00:00:00 kworker/3:1H-kblockd 66 ? 00:00:00 kworker/R-rpciod 67 ? 00:00:00 kworker/R-xprtiod 70 ? 00:00:00 kswapd0 71 ? 00:00:00 kswapd1 72 ? 00:00:00 kswapd2 73 ? 00:00:00 kswapd3 74 ? 00:00:00 kswapd4 75 ? 00:00:00 kswapd5 76 ? 00:00:00 kswapd6 77 ? 00:00:00 kswapd7 78 ? 00:00:00 kworker/R-nfsiod 79 ? 00:00:00 kworker/R-kthrotld 84 ? 00:00:00 hwrng 85 ? 00:00:00 kworker/R-iscsi_conn_cleanup 86 ? 00:00:00 kworker/R-nvme-wq 87 ? 00:00:00 kworker/R-nvme-reset-wq 88 ? 00:00:00 kworker/R-nvme-delete-wq 89 ? 00:00:00 kworker/R-DWC Notification WorkQ 90 ? 00:00:00 kworker/R-uas 92 ? 00:00:01 kworker/u21:0-brcmf_wq/mmc1:0001:1 93 ? 00:00:00 kworker/u22:0 94 ? 00:00:00 kworker/u23:0 95 ? 00:00:00 kworker/u24:0 96 ? 00:00:00 kworker/u25:0 99 ? 00:00:00 irq/38-aerdrv 106 ? 00:00:00 kworker/R-sdhci 108 ? 00:00:00 irq/162-mmc1 111 ? 00:00:00 kworker/R-sdhci 113 ? 00:00:00 irq/161-mmc0 121 ? 00:00:00 kworker/R-mmc_complete 150 ? 00:00:00 kworker/2:1H-kblockd 227 ? 00:00:00 kworker/R-v3d_bin 228 ? 00:00:00 kworker/R-v3d_render 229 ? 00:00:00 kworker/R-v3d_tfu 230 ? 00:00:00 kworker/R-v3d_csd 231 ? 00:00:00 kworker/R-v3d_cache_clean 232 ? 00:00:00 kworker/R-v3d_cpu 257 ? 00:00:00 jbd2/mmcblk0p2-8 258 ? 00:00:00 kworker/R-ext4-rsv-conversion 277 ? 00:00:00 kworker/R-mld 278 ? 00:00:00 kworker/R-ipv6_addrconf 327 ? 00:00:00 systemd-journal 345 ? 00:00:00 systemd-udevd 411 ? 00:00:00 irq/171-vc4 hdmi hpd connected 414 ? 00:00:00 irq/172-vc4 hdmi hpd disconnected 415 ? 00:00:00 cec-vc4-hdmi-0 416 ? 00:00:00 irq/174-vc4 hdmi cec rx 417 ? 00:00:00 spi10 418 ? 00:00:00 irq/175-vc4 hdmi cec tx 445 ? 00:00:00 irq/176-vc4 hdmi hpd connected 446 ? 00:00:00 irq/177-vc4 hdmi hpd disconnected 447 ? 00:00:00 cec-vc4-hdmi-1 451 ? 00:00:00 irq/178-vc4 hdmi cec rx 455 ? 00:00:00 irq/179-vc4 hdmi cec tx 467 ? 00:00:00 card1-crtc0 468 ? 00:00:00 card1-crtc1 469 ? 00:00:00 card1-crtc2 470 ? 00:00:00 card1-crtc3 483 ? 00:00:00 irq/185-1000800000.codec 492 ? 00:00:00 kworker/R-cfg80211 568 ? 00:00:00 kworker/R-brcmf_wq/mmc1:0001:1 569 ? 00:00:00 brcmf_wdog/mmc1:0001:1 597 ? 00:00:00 systemd-timesyn 603 ? 00:00:00 kworker/u21:3-hci0 609 ? 00:00:00 accounts-daemon 612 ? 00:00:00 avahi-daemon 613 ? 00:00:00 bluetoothd 614 ? 00:00:00 cron 615 ? 00:00:01 dbus-daemon 623 ? 00:00:00 polkitd 629 ? 00:00:00 systemd-logind 634 ? 00:00:04 thd 638 ? 00:00:00 udisksd 644 ? 00:00:00 avahi-daemon 739 ? 00:00:01 NetworkManager 757 ? 00:00:00 wpa_supplicant 765 ? 00:00:00 ModemManager 784 ? 00:00:00 cupsd 786 ? 00:00:00 lightdm 809 tty7 00:02:17 Xorg 810 tty1 00:00:00 login 811 ? 00:00:00 agetty 827 ? 00:00:00 lightdm 832 ? 00:00:00 systemd 833 ? 00:00:00 (sd-pam) 848 ? 00:00:00 pipewire 849 ? 00:00:00 pipewire 850 ? 00:00:00 wireplumber 851 ? 00:00:00 pipewire-pulse 852 ? 00:00:00 lxsession 862 ? 00:00:00 dbus-daemon 867 ? 00:00:00 rtkit-daemon 934 ? 00:00:00 ssh-agent 944 ? 00:00:00 gvfsd 986 ? 00:00:00 gvfsd-fuse 996 ? 00:00:03 openbox 999 ? 00:00:00 lxpolkit 1002 ? 00:01:29 lxpanel 1005 ? 00:00:02 pcmanfm 1012 ? 00:00:00 ssh-agent 1028 ? 00:00:00 systemd-inhibit 1031 ? 00:00:00 xcompmgr 1035 ? 00:00:00 gtk-nop 1051 ? 00:00:00 krfcommd 1084 ? 00:00:00 gvfs-udisks2-vo 1089 ? 00:00:00 gvfs-goa-volume 1093 ? 00:00:00 gvfs-mtp-volume 1097 ? 00:00:00 gvfs-afc-volume 1102 ? 00:00:00 gvfs-gphoto2-vo 1107 ? 00:00:00 gvfsd-trash 1116 ? 00:00:00 menu-cached 1257 tty1 00:00:00 bash 1289 ? 00:00:00 cups-browsed 1669 ? 00:01:02 geany 1707 pts/0 00:00:00 bash 1811 ? 00:00:49 lxterminal 1817 pts/1 00:00:00 bash 9488 ? 00:00:15 mousepad 9492 ? 00:00:00 xdg-desktop-por 9496 ? 00:00:00 xdg-document-po 9499 ? 00:00:00 xdg-permission- 9505 ? 00:00:00 fusermount3 9510 ? 00:00:00 xdg-desktop-por 9555 ? 00:00:00 gnome-keyring-d 9556 ? 00:00:00 gnome-keyring-d 9568 ? 00:00:00 dconf-service 9598 ? 00:00:00 gvfsd-network 9612 ? 00:00:00 gvfsd-dnssd 9632 ? 00:00:00 kworker/u17:0-kvfree_rcu_reclaim 9756 ? 00:00:00 gvfsd-metadata 10456 pts/2 00:00:00 bash 12197 ? 00:00:00 kworker/u20:1-events_unbound 12503 pts/3 00:00:00 bash 13039 pts/5 00:00:00 bash 15037 ? 00:00:00 kworker/u18:2-events_unbound 15461 ? 00:00:00 kworker/u19:1-kvfree_rcu_reclaim 16020 ? 00:01:44 firefox 16028 ? 00:00:00 crashhelper 16105 ? 00:00:00 Socket Process 16156 ? 00:00:00 forkserver 16160 ? 00:00:00 kworker/0:0H-mmc_complete 16165 ? 00:00:00 kworker/1:0H-kblockd 16183 ? 00:00:09 WebExtensions 16197 ? 00:00:00 RDD Process 16250 ? 00:00:02 Isolated Web Co 16272 ? 00:00:01 Isolated Web Co 16287 ? 00:00:06 Privileged Cont 16379 ? 00:00:00 Utility Process 16474 ? 00:00:00 upowerd 17039 ? 00:00:00 kworker/3:0H-kblockd 17218 ? 00:00:01 Isolated Web Co 17346 ? 00:00:00 Web Content 17438 ? 00:00:00 Web Content 17594 pts/4 00:00:00 bash 17758 ? 00:00:00 thttpd_wrapper 17895 ? 00:00:00 Web Content 19106 ? 00:00:00 kworker/u19:0-kvfree_rcu_reclaim 19714 ? 00:00:10 thttpd 20275 ? 00:00:00 kworker/u17:1-kvfree_rcu_reclaim 20394 ? 00:00:00 kworker/3:0-events 20838 pts/7 00:00:00 bash 21030 ? 00:00:00 kworker/0:1-events 21793 ? 00:00:00 kworker/u16:0-v3d_bin 22044 ? 00:00:00 kworker/u19:2-kvfree_rcu_reclaim 22183 ? 00:00:00 kworker/1:1-mm_percpu_wq 22590 ? 00:00:00 kworker/3:1-events 22638 ? 00:00:00 kworker/u16:2-v3d_render 22889 ? 00:00:00 kworker/0:3-events 23487 ? 00:00:00 kworker/u20:0-events_unbound 23611 ? 00:00:00 kworker/u18:1-events_unbound 24032 ? 00:00:00 kworker/2:1-events_power_efficient 24219 ? 00:00:00 kworker/1:0+events 24751 ? 00:00:00 kworker/u20:2-events_unbound 24917 ? 00:00:00 kworker/2:2-mm_percpu_wq 24962 ? 00:00:00 kworker/2:2H-kblockd 25095 ? 00:00:00 kworker/1:1H 25177 ? 00:00:00 kworker/2:3-events 25229 ? 00:00:00 kworker/0:0-events 25279 ? 00:00:00 kworker/3:3-events_power_efficient 25282 ? 00:00:00 kworker/u17:2-events_unbound 25286 ? 00:00:00 kworker/0:1H 25423 ? 00:00:00 kworker/u16:1-v3d_bin 25662 ? 00:00:00 kworker/1:2-events 25695 ? 00:00:00 kworker/1:3 25731 ? 00:00:00 kworker/0:2-events 25813 pts/1 00:00:00 ps pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 4370 Thu Aug 14 06:48:51 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ df -H ### 4378 Filesystem Size Used Avail Use% Mounted on udev 4.2G 0 4.2G 0% /dev tmpfs 846M 15M 831M 2% /run /dev/mmcblk0p2 244G 6.4G 225G 3% / tmpfs 4.3G 33k 4.3G 1% /dev/shm tmpfs 5.3M 50k 5.2M 1% /run/lock /dev/mmcblk0p1 535M 72M 464M 14% /boot/firmware tmpfs 846M 263k 845M 1% /run/user/1000 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls -al ### This is to check if anything got added here like a touch number or the public_html symbolic link. ### 4392 total 584 drwx------ 18 pi pi 4096 Aug 14 17:52 . drwxr-xr-x 21 root root 4096 Aug 14 18:42 .. -rw-r--r-- 1 pi pi 289408 Aug 13 17:15 2025-08-13-64bit-thttpd-build.txt -rw-r--r-- 1 pi pi 111967 Aug 14 17:52 2025-08-14-64-bit-thttpd-build.txt -rw-r--r-- 1 pi pi 72851 Aug 14 15:58 2025-08-14-64-bit-thttpd-build.txt~ -rw------- 1 pi pi 12520 Aug 14 14:33 .bash_history -rw-r--r-- 1 pi pi 220 May 12 18:06 .bash_logout -rw-r--r-- 1 pi pi 3523 May 12 18:06 .bashrc drwxr-xr-x 2 pi pi 4096 May 12 18:10 Bookshelf drwx------ 9 pi pi 4096 Aug 14 17:13 .cache drwxr-xr-x 18 pi pi 4096 Aug 14 14:33 .config drwx------ 3 pi pi 4096 Aug 14 11:47 .dbus drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Desktop drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Documents drwxr-xr-x 2 pi pi 4096 Aug 14 17:24 Downloads drwxr-xr-x 9 pi pi 4096 Aug 14 18:07 freedom -rw------- 1 pi pi 20 Aug 14 17:05 .lesshst drwxr-xr-x 4 pi pi 4096 Aug 14 11:44 .local drwx------ 4 pi pi 4096 Aug 14 17:11 .mozilla drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Music drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Pictures drwx------ 3 pi pi 4096 Aug 14 12:58 .pp_backup -rw-r--r-- 1 pi pi 807 May 12 18:06 .profile drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Public -rw-r--r-- 1 pi pi 0 Aug 14 11:44 .sudo_as_admin_successful drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Templates drwxr-xr-x 2 pi pi 4096 Aug 14 11:44 Videos -rw------- 1 pi pi 56 Aug 14 14:34 .Xauthority -rw------- 1 pi pi 2437 Aug 14 14:34 .xsession-errors -rw------- 1 pi pi 2404 Aug 14 14:02 .xsession-errors.old pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls -al /home/local/sbin ### 4430 total 204 drwxr-xr-x 4 root root 4096 Aug 14 17:35 . drwxr-xr-x 5 root root 4096 Aug 14 15:19 .. -rwxr-xr-- 1 pi pi 185 Aug 31 2021 datelog -r-xr-xr-- 1 pi pi 185 Aug 31 2021 datelog~ -rwxr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd -r-xr-xr-- 1 pi pi 385 Aug 31 2021 dead-thttpd~ -rwxr-xr-x 1 root root 72288 Aug 14 15:19 htpasswd -rwxr-sr-x 1 root www 71472 Aug 14 15:19 makeweb drwxr-xr-x 2 pi pi 4096 Jul 12 2022 os-debug -r-xr-xr-x 1 root root 2878 Aug 14 15:19 syslogtocern -r-xr-xr-x 1 bin bin 157808 Aug 14 15:19 thttpd drwxr-xr-x 3 pi pi 4096 Jul 12 2022 thttpd-extras -rwxr-xr-- 1 pi pi 153 Aug 31 2021 thttpd_wrapper pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # Notice that the binary "thttpd" file on a 64-bit OS is only 157,808 bytes! ### 4451 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # If you are saving the terminal file, do it now! pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 4459 Thu Aug 14 06:52:48 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # Stop the computer, then start the computer to see where "thttpd_wrapper" ends up, by using ps -e, as the computer loads from scratch! ### 4465 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 4475 Thu Aug 14 06:58:38 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ ps -e ### 4480 PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 pool_workqueue_release 4 ? 00:00:00 kworker/R-kvfree_rcu_reclaim 5 ? 00:00:00 kworker/R-rcu_gp 6 ? 00:00:00 kworker/R-sync_wq 7 ? 00:00:00 kworker/R-slub_flushwq 8 ? 00:00:00 kworker/R-netns 9 ? 00:00:00 kworker/0:0-rcu_gp 10 ? 00:00:00 kworker/0:0H-mmc_complete 11 ? 00:00:00 kworker/0:1-events 12 ? 00:00:00 kworker/u16:0-v3d_render 13 ? 00:00:00 kworker/R-mm_percpu_wq 14 ? 00:00:00 rcu_tasks_kthread 15 ? 00:00:00 rcu_tasks_rude_kthread 16 ? 00:00:00 rcu_tasks_trace_kthread 17 ? 00:00:00 ksoftirqd/0 18 ? 00:00:00 rcu_preempt 19 ? 00:00:00 rcu_exp_par_gp_kthread_worker/0 20 ? 00:00:00 rcu_exp_gp_kthread_worker 21 ? 00:00:00 migration/0 22 ? 00:00:00 cpuhp/0 23 ? 00:00:00 cpuhp/1 24 ? 00:00:00 migration/1 25 ? 00:00:00 ksoftirqd/1 26 ? 00:00:00 kworker/1:0-events 27 ? 00:00:00 kworker/1:0H-events_highpri 28 ? 00:00:00 cpuhp/2 29 ? 00:00:00 migration/2 30 ? 00:00:00 ksoftirqd/2 31 ? 00:00:00 kworker/2:0-rcu_gp 32 ? 00:00:00 kworker/2:0H-events_highpri 33 ? 00:00:00 cpuhp/3 34 ? 00:00:00 migration/3 35 ? 00:00:00 ksoftirqd/3 36 ? 00:00:00 kworker/3:0-events_freezable 37 ? 00:00:00 kworker/3:0H-events_highpri 38 ? 00:00:00 kworker/u17:0-events_unbound 39 ? 00:00:00 kworker/u18:0-events_unbound 40 ? 00:00:00 kworker/u19:0-events_unbound 41 ? 00:00:00 kworker/u20:0-kvfree_rcu_reclaim 42 ? 00:00:00 kdevtmpfs 43 ? 00:00:00 kworker/R-inet_frag_wq 44 ? 00:00:00 kauditd 45 ? 00:00:00 khungtaskd 46 ? 00:00:00 oom_reaper 47 ? 00:00:00 kworker/u17:1-async 48 ? 00:00:00 kworker/R-writeback 49 ? 00:00:00 kcompactd0 50 ? 00:00:00 kcompactd1 51 ? 00:00:00 kcompactd2 52 ? 00:00:00 kcompactd3 53 ? 00:00:00 kcompactd4 54 ? 00:00:00 kcompactd5 55 ? 00:00:00 kcompactd6 56 ? 00:00:00 kcompactd7 57 ? 00:00:00 kworker/R-kintegrityd 58 ? 00:00:00 kworker/R-kblockd 59 ? 00:00:00 kworker/R-blkcg_punt_bio 60 ? 00:00:00 kworker/u17:2-events_unbound 61 ? 00:00:00 kworker/u17:3-async 62 ? 00:00:00 watchdogd 63 ? 00:00:00 kworker/1:1-events 64 ? 00:00:00 kworker/3:1-events 65 ? 00:00:00 kworker/2:1-mm_percpu_wq 66 ? 00:00:00 kworker/0:1H-mmc_complete 67 ? 00:00:00 kworker/R-rpciod 68 ? 00:00:00 kworker/R-xprtiod 69 ? 00:00:00 kswapd0 70 ? 00:00:00 kswapd1 71 ? 00:00:00 kswapd2 72 ? 00:00:00 kswapd3 73 ? 00:00:00 kswapd4 74 ? 00:00:00 kswapd5 75 ? 00:00:00 kswapd6 76 ? 00:00:00 kswapd7 77 ? 00:00:00 kworker/R-nfsiod 78 ? 00:00:00 kworker/R-kthrotld 79 ? 00:00:00 kworker/2:2-rcu_gp 80 ? 00:00:00 kworker/2:3-cgroup_destroy 81 ? 00:00:00 kworker/2:4-events 82 ? 00:00:00 kworker/u19:1-kvfree_rcu_reclaim 84 ? 00:00:00 hwrng 85 ? 00:00:00 kworker/R-iscsi_conn_cleanup 86 ? 00:00:00 kworker/R-nvme-wq 87 ? 00:00:00 kworker/R-nvme-reset-wq 88 ? 00:00:00 kworker/R-nvme-delete-wq 89 ? 00:00:00 kworker/R-DWC Notification WorkQ 90 ? 00:00:00 kworker/R-uas 91 ? 00:00:00 kworker/1:1H-kblockd 92 ? 00:00:00 kworker/u21:0-hci0 93 ? 00:00:00 kworker/u22:0 94 ? 00:00:00 kworker/u23:0 95 ? 00:00:00 kworker/u24:0 96 ? 00:00:00 kworker/u25:0 97 ? 00:00:00 kworker/u19:2-writeback 98 ? 00:00:00 irq/38-aerdrv 100 ? 00:00:00 kworker/u18:1 101 ? 00:00:00 kworker/1:2-events 102 ? 00:00:00 kworker/1:3 103 ? 00:00:00 kworker/1:4 104 ? 00:00:00 kworker/R-sdhci 106 ? 00:00:00 irq/161-mmc0 107 ? 00:00:00 kworker/u19:3 109 ? 00:00:00 kworker/R-sdhci 110 ? 00:00:00 irq/162-mmc1 111 ? 00:00:00 kworker/3:2-rcu_gp 112 ? 00:00:00 kworker/3:3-events 114 ? 00:00:00 kworker/u20:1-ext4-rsv-conversion 115 ? 00:00:00 kworker/R-mmc_complete 138 ? 00:00:00 kworker/3:1H-kblockd 162 ? 00:00:00 kworker/2:1H-kblockd 221 ? 00:00:00 kworker/R-v3d_bin 222 ? 00:00:00 kworker/R-v3d_render 223 ? 00:00:00 kworker/R-v3d_tfu 224 ? 00:00:00 kworker/R-v3d_csd 225 ? 00:00:00 kworker/R-v3d_cache_clean 226 ? 00:00:00 kworker/R-v3d_cpu 227 ? 00:00:00 kworker/3:2H-kblockd 228 ? 00:00:00 kworker/u18:2-kvfree_rcu_reclaim 242 ? 00:00:00 kworker/u20:2-events_unbound 253 ? 00:00:00 jbd2/mmcblk0p2-8 254 ? 00:00:00 kworker/R-ext4-rsv-conversion 272 ? 00:00:00 kworker/R-mld 273 ? 00:00:00 kworker/R-ipv6_addrconf 274 ? 00:00:00 kworker/u16:1-v3d_render 292 ? 00:00:00 kworker/1:2H-kblockd 321 ? 00:00:00 systemd-journal 338 ? 00:00:00 systemd-udevd 418 ? 00:00:00 irq/170-vc4 hdmi hpd connected 420 ? 00:00:00 irq/171-vc4 hdmi hpd disconnected 421 ? 00:00:00 cec-vc4-hdmi-0 422 ? 00:00:00 irq/172-vc4 hdmi cec rx 423 ? 00:00:00 irq/173-vc4 hdmi cec tx 438 ? 00:00:00 kworker/0:2-events 444 ? 00:00:00 spi10 446 ? 00:00:00 irq/176-vc4 hdmi hpd connected 447 ? 00:00:00 irq/177-vc4 hdmi hpd disconnected 448 ? 00:00:00 cec-vc4-hdmi-1 449 ? 00:00:00 irq/178-vc4 hdmi cec rx 450 ? 00:00:00 irq/179-vc4 hdmi cec tx 457 ? 00:00:00 card1-crtc0 458 ? 00:00:00 card1-crtc1 459 ? 00:00:00 card1-crtc2 460 ? 00:00:00 card1-crtc3 473 ? 00:00:00 irq/184-1000800000.codec 478 ? 00:00:00 kworker/R-cfg80211 488 ? 00:00:00 kworker/0:3-events 498 ? 00:00:00 kworker/R-brcmf_wq/mmc1:0001:1 503 ? 00:00:00 brcmf_wdog/mmc1:0001:1 544 ? 00:00:00 kworker/u21:1-hci0 545 ? 00:00:00 kworker/u21:2-brcmf_wq/mmc1:0001:1 574 ? 00:00:00 kworker/2:2H-kblockd 588 ? 00:00:00 kworker/0:2H-kblockd 596 ? 00:00:00 systemd-timesyn 605 ? 00:00:00 accounts-daemon 607 ? 00:00:00 avahi-daemon 608 ? 00:00:00 bluetoothd 609 ? 00:00:00 cron 610 ? 00:00:00 dbus-daemon 614 ? 00:00:00 polkitd 624 ? 00:00:00 systemd-logind 627 ? 00:00:00 thd 633 ? 00:00:00 udisksd 636 ? 00:00:00 avahi-daemon 730 ? 00:00:00 NetworkManager 748 ? 00:00:00 wpa_supplicant 758 ? 00:00:00 ModemManager 778 ? 00:00:00 cupsd 780 ? 00:00:00 lightdm 804 tty7 00:00:00 Xorg 816 ? 00:00:00 lightdm 821 ? 00:00:00 systemd 822 ? 00:00:00 (sd-pam) 837 ? 00:00:00 pipewire 838 ? 00:00:00 pipewire 839 ? 00:00:00 wireplumber 840 ? 00:00:00 pipewire-pulse 841 ? 00:00:00 lxsession 851 ? 00:00:00 dbus-daemon 856 ? 00:00:00 rtkit-daemon 923 ? 00:00:00 ssh-agent 933 ? 00:00:00 gvfsd 975 ? 00:00:00 gvfsd-fuse 985 ? 00:00:00 openbox 988 ? 00:00:00 lxpolkit 991 ? 00:00:00 lxpanel 994 ? 00:00:00 pcmanfm 1001 ? 00:00:00 ssh-agent 1017 ? 00:00:00 systemd-inhibit 1020 ? 00:00:00 xcompmgr 1036 ? 00:00:00 gtk-nop 1038 ? 00:00:00 kworker/u16:2-v3d_render 1041 ? 00:00:00 krfcommd 1074 ? 00:00:00 gvfs-udisks2-vo 1079 ? 00:00:00 gvfs-goa-volume 1083 ? 00:00:00 gvfs-mtp-volume 1087 ? 00:00:00 gvfs-afc-volume 1092 ? 00:00:00 gvfs-gphoto2-vo 1097 ? 00:00:00 gvfsd-trash 1106 ? 00:00:00 menu-cached 1251 ? 00:00:02 packagekitd 1264 ? 00:00:00 cups-browsed 1268 ? 00:00:00 thttpd_wrapper 1270 tty1 00:00:00 login 1271 ? 00:00:00 agetty 1273 ? 00:00:00 thttpd 1280 tty1 00:00:00 bash 1672 ? 00:00:00 lxterminal 1678 pts/0 00:00:00 bash 1720 ? 00:00:00 kworker/u16:3-v3d_bin 1736 pts/0 00:00:00 ps pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ps -p 1268 1273 ### 4700 PID TTY STAT TIME COMMAND 1268 ? S 0:00 /bin/sh /home/local/sbin/thttpd_wrapper 1273 ? Ss 0:00 /home/local/sbin/thttpd -D -C /home/local/www/thttpd_config pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ### **************************************************************** ### 4707 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # cd ~/freedom ### (The directory "freedom" should be in "/home/(pi)/" (the main user's home directory)). ### 4713 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # It would probably be a good idea to read through this install before one sits down and starts building their web site, just to get an idea of what one will be copying and what the computer will be sending back. "thttpd" will start when the computer loads and if something causes it to stop, it will restart in 10 seconds. "thttpd" is designed to be a 24/7/365 World Wide Web server. When the OS needs to "reboot", thttpd will be running by the time the desktop appears. It is totally AWESOME!!! ### 4719 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ Since the Raspberry Pi has wireless capabilities, using a wireless router (even one not connected to the internet), 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 thttpd and the IP addresses are assigned from the router. ### 4724 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ I have tried to make this install simple enough even a third of fourth grader should be able to get through it. Since I have had trouble missing some commands I will mark them, as a comment, with "###" and "### sudo", for commands that need to be executed as "sudo". This way a person should be able to find all of the command lines with just "###". There will be times one has to make their own changes to a command so be careful. It is almost all "copy and paste" but there are a few times one will have to use their own words, like file names and passwords for their site. This file is long but I did not strip any of the computer generated lines out of it and added blank lines so one will be able to better see the next item that needs to be copied, pasted, and entered on the terminal. ### 4729 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # The thttpd man page gives a good idea what this program can do. As well, the Acme.com web site has more information. I have also included the: "'ACME Labs HTML Sampler -- HTML is really pretty easy to learn.' If you've ever used any sort of text formatting language, such as nroff or Scribe, this is the same idea. Even if you haven't, you should be able to pick this up pretty quick; it's just text with interspersed to specify the formatting. ### 4734 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # "This page gives examples of all the basic HTML formatting codes. Read through it as a tutorial; refer back to it as a reference; use the index at the end." ### 4738 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # To start with one can even use just regular files and thttpd will actually serve them. My site: http://162.250.19.7/ is built mostly that way. But there are some of my old sites that are under "ac0xl/" and then "www/" which I built around 2004 or so. One just has to click on the directory and it will open. To get back up one level just click on the (../) two periods and a slash. ### 4743 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # On a 32-bit OS "thttpd" is limited to displaying files less than 2 GB (2**31 = 2,147,483,647 or 7fff ffff) Bytes. While a 64-bit OS is limited to displaying (2**63 = 9.223372031^18 or 7fff ffff ffff ffff) Bytes. I have tried a 5 GB (5,368,709,120 Bytes) file with no problems! This is with no changes being made in "thttpd". Out of the box, thttpd is bullet proof since it's web site is read-only but capable of doing CGI, as well as several other things, and is safe to run on the "World Wide Web"! My web site: http://162.250.19.7/, has been up and running on the WWW since August 01, 2019 without any problems with hackers doing any damage to my site! The config file is simple and short! The thttpd binary file I created using Raspberry Pi 64-bit OS on a Raspberry Pi 400, Mar 16 21:27, is only 121,272 bytes long and I basically have been using this config file since the beginning: ### 4748 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # # -r-xr-xr-x 1 bin bin 121272 Mar 16 21:27 thttpd ### 4750 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # pi@raspberrypi:/home/local/www $ ### 4752 pi@raspberrypi:~ $ # pi@raspberrypi:/home/local/www $ cat thttpd_config pi@raspberrypi:~ $ pi@raspberrypi:~ $ # /home/local/www/thttpd_config pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # dir=/home/local/www pi@raspberrypi:~ $ # chroot #chroot jail pi@raspberrypi:~ $ pi@raspberrypi:~ $ # data_dir=users pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # #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" (ln -rs ../"user-name"), see: "vhost-DN-test". pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # cgipat=**.cgi pi@raspberrypi:~ $ # logfile=/home/local/www/logs/thttpd_log pi@raspberrypi:~ $ # pidfile=/var/run/thttpd.pid pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # pi@raspberrypi:/home/local/www $ pi@raspberrypi:~ $ # pi@raspberrypi:/home/local/www $ ### 4769 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # The thttpd binary file I created using Raspberry Pi 32-bit OS on a Raspberry Pi B version 2.0, with only 512 Megabytes of RAM, Jun 1 21:26, is only 91,232 bytes long: ### 4774 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # -r-xr-xr-x 1 bin bin 91232 Jun 1 21:26 thttpd. ### 4777 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # When I looked at Apache, which out of the box is only safe as an internal web server, I could not make it through the config file and found "thttpd - tiny/turbo/throttling web server." from Acme.com which used to be the number seven (7) most popular web server. ### 4780 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # I have since found "ps -p xxxx xxxx" with the "xxxx" being the PID numbers, and will print out what the PID number goes to so one does not wipe out something one should not! Be Safe!!! ### 4783 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # ***************************** ### 4786 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # Adding "whois" will let you lookup IP Addresses of visitors to your "World Wide Website"! ### 4789 pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 4793 Thu Aug 14 07:20:01 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ sudo apt install whois ### 4799 Reading package lists... Done Building dependency tree... Done Reading state information... Done The following packages were automatically installed and are no longer required: libbasicusageenvironment1 libgroupsock8 liblivemedia77 python3-v4l2 Use 'sudo apt autoremove' to remove them. The following NEW packages will be installed: whois 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 69.1 kB of archives. After this operation, 493 kB of additional disk space will be used. Get:1 http://deb.debian.org/debian bookworm/main arm64 whois arm64 5.5.17 [69.1 kB] Fetched 69.1 kB in 0s (235 kB/s) debconf: unable to initialize frontend: Dialog debconf: (Dialog frontend requires a screen at least 13 lines tall and 31 columns wide.) debconf: falling back to frontend: Readline Selecting previously unselected package whois. (Reading database ... 151250 files and directories currently installed.) Preparing to unpack .../whois_5.5.17_arm64.deb ... Unpacking whois (5.5.17) ... Setting up whois (5.5.17) ... Processing triggers for man-db (2.11.2-2) ... pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ whois 162.250.19.7 ### 4826 # # ARIN WHOIS data and services are subject to the Terms of Use # available at: https://www.arin.net/resources/registry/whois/tou/ # # If you see inaccuracies in the results, please report at # https://www.arin.net/resources/registry/whois/inaccuracy_reporting/ # # Copyright 1997-2025, American Registry for Internet Numbers, Ltd. # NetRange: 162.250.16.0 - 162.250.23.255 CIDR: 162.250.16.0/21 NetName: RCW NetHandle: NET-162-250-16-0-1 Parent: NET162 (NET-162-0-0-0-0) NetType: Direct Allocation OriginAS: Organization: River Canyon Wireless (RE-27) RegDate: 2013-12-12 Updated: 2013-12-12 Ref: https://rdap.arin.net/registry/ip/162.250.16.0 OrgName: River Canyon Wireless OrgId: RE-27 Address: 611 S. Main City: Moab StateProv: UT PostalCode: 84532 Country: US RegDate: 2012-02-06 Updated: 2024-11-25 Ref: https://rdap.arin.net/registry/entity/RE-27 OrgTechHandle: HICKM57-ARIN OrgTechName: Hickman, Ryan OrgTechPhone: +1-435-259-6763 OrgTechEmail: Ryan@Royceselectronics.com OrgTechRef: https://rdap.arin.net/registry/entity/HICKM57-ARIN OrgNOCHandle: HICKM57-ARIN OrgNOCName: Hickman, Ryan OrgNOCPhone: +1-435-259-6763 OrgNOCEmail: Ryan@Royceselectronics.com OrgNOCRef: https://rdap.arin.net/registry/entity/HICKM57-ARIN OrgAbuseHandle: COLCO8-ARIN OrgAbuseName: Colcord, Bill OrgAbusePhone: +1-435-259-6763 OrgAbuseEmail: bill.c@rivercanyonwireless.com OrgAbuseRef: https://rdap.arin.net/registry/entity/COLCO8-ARIN # # ARIN WHOIS data and services are subject to the Terms of Use # available at: https://www.arin.net/resources/registry/whois/tou/ # # If you see inaccuracies in the results, please report at # https://www.arin.net/resources/registry/whois/inaccuracy_reporting/ # # Copyright 1997-2025, American Registry for Internet Numbers, Ltd. # pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # pi@raspberrypi:~ $ pi@raspberrypi:~ $ # This is installing thttpd. Most of the commands can be copied from the install file and pasted to a terminal. A few things will need to be changed but most will be: copy, paste, enter. WWW pages for EVERYONE!!! ### 4900 pi@raspberrypi:~ $ pi@raspberrypi:~ $ thttpd-2.29-file-changes.txt ### 4905 To reduce the amount of work needed to install thttpd, I have copied the files from Acme.com and made some modifications. These files have been changed in thttpd-2.29, and these are the changes that were made! *****If you expand "thttpd-2.29.tar.gz" these changes will be missing!***** ### 4908 *****These files are in: cd ~/freedom/Acme.com/thttpd-2.29/ #***** ### 4911 The first change in "thttpd-2.29" is in "Makefile.in" by adding the directory "man1", without this a fresh install will fail! In "Makefile.in" copy line 116 and paste it before, and change man8 to man1, and save the file. The result will be: (This file is: "Makefile.in".) ### 4914 114 115 install-man: 116 -mkdir -p $(DESTDIR)$(MANDIR)/man1 117 -mkdir -p $(DESTDIR)$(MANDIR)/man8 118 $(INSTALL) -m 444 -o bin -g bin thttpd.8 $(DESTDIR)$(MANDIR)/man8 119 The second change in "thttpd-2.29" is in "config.h" where we want to be able to use the "makeweb" program. Here it is making "users" active by copying line 127, adding some extra lines at 130 and pasting the "users" line on line 131, then saving the file. The result will be: (This file is: "config.h".) ### 4930 126 #ifdef notdef 127 #define TILDE_MAP_1 "users" 128 #define TILDE_MAP_2 "public_html" 129 #endif 130 131 #define TILDE_MAP_1 "users" 132 The third change in "thttpd-2.29" is in "configure" and is to change where all of the data is written from: "/usr/local" to "/home/local" since the only directory that can be saved when changing operating systems (OS's) is the "/home/" directory, all of the others get over written! This change is in "configure" where line 12 is changed from "/usr/local" to "/home/local", giving the following result, then save the file. (This file is: "configure".) ### 4948 9 10 # Defaults: 11 ac_help= 12 ac_default_prefix=/home/local 13 # Any additions from configure.in: 14 This is the end of the changes in "thttpd-2.29" ### 4964 ***************************** ### 4968 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # If one does an OS change, the other files that need to be changed in "/etc/" are: ### 4971 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # sudo cp -iav /home/local/sbin/thttpd-extras/thttpd-rotate /etc/cron.daily/thttpd-rotate ### 4975 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # # or if you are using the os-debug version, ### 4978 pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # sudo cp -iav /home/local/sbin/os-debug/thttpd-rotate /etc/cron.daily/thttpd-rotate # this file needs other programs found in "os-debug" see: "readme.txt" in "os-debug". ### 4980 pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # sudo cp -iav /home/local/sbin/thttpd-extras/rc.local /etc/rc.local # Make sure you don't wipe out a file that might already be there! # 4984 pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # sudo cp -iav /home/local/sbin/thttpd-extras/thttpd.sh /etc/thttpd.sh # This file pulls in the "thttpd_wrapper" which restarts "thttpd" in 10 seconds. ### 4986 pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # sudo cp -iav /home/local/sbin/thttpd-extras/thttpd.sh /etc/thttpd.sh # This file pulls in the "thttpd_wrapper" which restarts "thttpd" in 10 seconds. ### 4989 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # ***************************** ### 4992 pi@raspberrypi:~ $ pi@raspberrypi:~ $ # pi@raspberrypi:~ $ # With the older Pi's with only 512 MB of RAM "Chromium" would choke and not want to run, so I found a "text" browser which works great to test the "thttpd" install since one will only be testing text, to see if "thttpd" is functioning right. "Lynx" is built into "/bin" and works great! ### 4995 pi@raspberrypi:~ $ # pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ date ### 4999 Thu Aug 14 07:36:12 PM MDT 2025 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ # ***************************** ### 5003 pi@raspberrypi:~ $ pi@raspberrypi:~ $ pi@raspberrypi:~ $ *