==================================================================================================== WHAT IS GOPHER AND GOPHERSPACE? GOPHER is a network protocol that enables multiple servers to create a single, uniform filesystem that transcends system architecure and operating systems (GOPHERSPACE). With GOPHER, information holds the most value. Since presentation is uniform across GOPHERSPACE, the user does not encounter any challenges in 'learning' a new site. Because of its simplicity and its emphasis on the importance of informational texts, GOPHER is ideal for those who are visually impared. A GOPHER client can be called from SDF by typing 'gopher'. A URL (Uniform Resource Locator) can be given as an argument. The client itself is a document examiner. You can use it to search text documents or download files. Clients under X11, Macintosh and other systems can view pictures, and stream audio / video. Many people think the http protocol has deprecated gopher, but that just isn't true. Where do you think GOPHERs live? underground. When you build your GOPHERSPACE on SDF, you are contributing to an underground network of systems that still believe in the gopher protocol. There is no commercialism, no banner ads, no spam, no pop-up ads. GOPHER gives you what you want: information and files (in any form) without the silliness of HTML and clumsiness of websites. No HTML development is needed to contribute to GOPHERSPACE.. since sites are uniform, all you need to do is upload or create your files. HOW CAN I SETUP MY GOPHERSPACE? This document was written with 'mkgopher' in mind. You may be managing your space from the UNIX shell, but since 'mkgopher' uses common UNIX commands, this should still be helpful. SETUP ---- This will create the directory for the top level of your GOPHERSPACE. Your URL will be "gopher://sdf.org/1/users/username" (or "gopher://sdf-eu.org/1/users/username") where 'username' is your UNIX user id. During your 'mkgopher' session, this directory will be present. If you don't create anyfiles or directories, the space will be removed to keep our site clean. NOTE: Unfortunately, most web browsers do not render gopher pages properly, let alone grok Gopher URLs. TITLE ----- Your GOPHER URL is gopher://sdf.org/1/users/login (or gopher://sdf-eu.org/1/users/login) where 'login' is the UNIX user id you use to login to SDF. Your SITE name is your 'login'. Since that is limited to 8 characters, you can use TITLE to set a 50 character or less title for your site. DESCRIBE -------- For each directory you create in your GOPHERSPACE you can use the DESCRIBE command to create a detailed description. This entry is limited to 9 lines of roughly 50 characters per line. MKDIR ----- Create a subdirectory within your GOPHERSPACE. RMDIR ----- Remove a subdirectory within your GOPHERSPACE. PICO ---- Edit and publish a document. You can also use this as a way to cut and paste text from your computer terminal to SDF. ASCII upload mode can also be used, just start sending text once you open the editing buffer. UPLOAD ------ This should be used for large text files or binary data that cannot be transmitted via an ASCII transfer. UPLOAD uses the ZMODEM file transfer protocol which some terminal emulators support (TeraTerm ..) ==================================================================================================== Source code of a menu Gopher menu items are defined by lines of tab-separated values in a text file. This file is sometimes called a gophermap. As the source code to a gopher menu, a gophermap is roughly analogous to an HTML file for a web page. Each tab-separated line (called a selector line) gives the client software a description of the menu item: what it is, what it is called, and where it leads to. The client displays the menu items in the order that they appear in the gophermap. The first character in a selector line indicates the item type, which tells the client what kind of file or protocol the menu item points to. This helps the client decide what to do with it. Gopher's item types are a more basic precursor to the media type system used by the Web and email attachments. The item type is followed by the user display string (a description or label that represents the item in the menu); the selector (a path or other string for the resource on the server); the hostname (the domain name or IP address of the server), and the network port. All lines in a gopher menu are terminated by "CR + LF". Example of a selector line in a menu source: The following selector line generates a link to the "/home" directory at the subdomain gopher.floodgap.com, on port 70. The item type of 1 indicates that the linked resource is a Gopher menu itself. The string "Floodgap Home" is what the client will show to the user when visiting the example menu. 1Floodgap Home /home gopher.floodgap.com 70 Item type User display string Selector Hostname Port 1 Floodgap Home /home gopher.floodgap.com 70 Item types In a Gopher menu's source code, a one-character code indicates what kind of content the client should expect. This code may either be a digit or a letter of the alphabet; letters are case-sensitive. The technical specification for Gopher, RFC 1436, defines 14 item types. The later gopher+ specification defined an additional 3 types.[24] A one-character code indicates what kind of content the client should expect. Item type 3 is an error code for exception handling. Gopher client authors improvised item types h (HTML), i (informational message), and s (sound file) after the publication of RFC 1436. Browsers like Netscape Navigator and early versions of Microsoft Internet Explorer would prepend the item type code to the selector as described in RFC 4266, so that the type of the gopher item could be determined by the url itself. Most gopher browsers still available, use these prefixes in their urls. ---------------------------------------------------------------------------------------------------- Canonical types ---------------------------------------------------------------------------------------------------- 0 Text file 1 Gopher submenu 2 CCSO Nameserver 3 Error code returned by a Gopher server to indicate failure 4 BinHex-encoded file (primarily for Macintosh computers) 5 DOS file 6 uuencoded file 7 Gopher full-text search 8 Telnet 9 Binary file + Mirror or alternate server (for load balancing or in case of primary server downtime) g GIF file I Image file T Telnet 3270 ---------------------------------------------------------------------------------------------------- gopher+ types ---------------------------------------------------------------------------------------------------- : Bitmap image ; Movie file < Sound file ---------------------------------------------------------------------------------------------------- Non-canonical types ---------------------------------------------------------------------------------------------------- d Doc. Seen used alongside PDF and .doc files h HTML file i Informational message, widely used.[25] p image file "(especially the PNG format)" r document RTF file ("Rich Text Format") s Sound file (especially the WAV format) P PDF (Portable Document Format) file X XML (Extensible Markup Language) file ---------------------------------------------------------------------------------------------------- Here is an example gopher session where the user requires a gopher menu (/Reference on the first line): /Reference 1CIA World Factbook /Archives/mirrors/textfiles.com/politics/CIA gopher.quux.org 70 0Jargon 4.2.0 /Reference/Jargon 4.2.0 gopher.quux.org 70 + 1Online Libraries /Reference/Online Libraries gopher.quux.org 70 + 1RFCs: Internet Standards /Computers/Standards and Specs/RFC gopher.quux.org 70 1U.S. Gazetteer /Reference/U.S. Gazetteer gopher.quux.org 70 + iThis file contains information on United States fake (NULL) 0 icities, counties, and geographical areas. It has fake (NULL) 0 ilatitude/longitude, population, land and water area, fake (NULL) 0 iand ZIP codes. fake (NULL) 0 i fake (NULL) 0 iTo search for a city, enter the city's name. To search fake (NULL) 0 ifor a county, use the name plus County -- for instance, fake (NULL) 0 iDallas County. fake (NULL) 0 The gopher menu sent back from the server, is a sequence of lines each of which describes an item that can be retrieved. Most clients will display these as hypertext links, and so allow the user to navigate through gopherspace by following the links.[5] This menu includes a text resource (itemtype 0 on the third line), multiple links to submenus (itemtype 1, on the second line as well as lines 4–6) and a non-standard information message (from line 7 on), broken down to multiple lines by providing dummy values for selector, host and port. External links Historically, to create a link to a Web server, "GET /" was used as a pseudo-selector to emulate an HTTP GET request.[26] John Goerzen created an addition[27] to the Gopher protocol, commonly referred to as "URL links", that allows links to any protocol that supports URLs. For example, to create a link to http://gopher.quux.org/, the item type is h, the display string is the title of the link, the item selector is "URL:http://gopher.quux.org/", and the domain and port are that of the originating Gopher server (so that clients that do not support URL links will query the server and receive an HTML redirection page). Gopher+ Gopher+ is a forward compatible enhancement to the Gopher protocol. Gopher+ works by sending metadata between the client and the server. The enhancement was never widely adopted by Gopher servers.[28][29][30] The client sends a tab followed by a +. A Gopher+ server will respond with a status line followed by the content the client requested. An item is marked as supporting Gopher+ in the Gopher directory listing by a tab + after the port (this is the case of some of the items in the example above). Other features of Gopher+ include: Item attributes, which can include the items Administrator Last date of modification Different views of the file, like PostScript or plain text, or different languages Abstract, or description of the item Interactive queries ==================================================================================================== SZCZEŻUJA ---------------------------------------------------------------------------------------------------- Setting a Gopher hole ===================== As the beginning of the 2021 came through as setting a Gemini capsule, the beginning of the 2022 is coming through as setting a Gopher hole. I've decided to sign up for sdf.org account, because there is a big gopher community and I didn't want to stuck in as some pioneer somewhere else. So it should be easy thing to set up Gopher hole there. No it wasn't so obvious. My "setting" recipe -------------------- The whole process of setting up a Gopher hole is easy, of course for everyone who had set up earlier one. There aren't any special and complicated software, there are only text files and Unix-like system. As a model user I started from manual. I visited [SDF Gopher FAQ] which can't be described as a very detailed source of knowledge. There is reference for `mkgopher` internal command, which is helper for doing so. So... I tried it. It confused me more, than it helped me. After a while, I knew that I must make everything from command line on my own. I noticed on [SDF Gopher Tutorial] two more helpers. There is 'mkgopherentry' script and `phlog` command. First one also confused me in creation of gophermap file (script's output is a bit oddy). The second one was a bit mysterious, but finally I got its purpose (it's only a trigger for linking on [Gopher Club Phlogs]). So as I had written before, it's better to set your Gopher hole on your own. But there are hidden traps, which aren't described in clear way in FAQ or tutorial. * You need a symlink from your home directory: `gopher -> /ftp/pub/users/szczezuja`, which I made by 'mkgopher' command and by calling "SETUP" inside it; * You need some content, for example textfile, which you want to publish on Gopher; * You need to create a gophermap text file, which is pointing for that content; * You need to set up proper file permission in your home directory - as described on [Slugmax SDF Gopher Tutorial]: `chmod o+r file` (read for others) and `chmod g+r file` (read for group) and `chmod o+rx directory`; As [Ruari @ 2022-01-11 23:41] told me, the last point is specific for sdf.org, and it's caused by default permissions on this server. But it's good to know about it, because it is showing a simplicity of Gopher servers. There are no a special layer of permissions, if you are set "read for everyone" your files are public. In modern web-servers era, we sometimes believe in some kind of magic which would protect us. In the era of Gopher things were simpler. Further thoughts ----------------- It took me a while to settled gophermap topic in my mind. The whole idea is also simple, but I was spoiled by `mkgopherentry` example output. In the most cases we need only a little of the full gophermap. And as I understand, part of the rest isn't a official standard (so sometimes could be served in a different way in different servers and clients). So as it's described in [Slugmax SDF Gopher Tutorial]: `` XSome text here/path/to/contentexample.orgN Where X in most cases is 0 - for text files, and 1 - for directories. And that's enough for gophermap, you don't need any scripts for it. For me the whole idea of content and gophermap is a bit fragile. One mistaken character or permission, during the first or next uploads could broke our Gopher hole. It could be hard to test all links. I understand why many things in Gophersphere are broken. But the most difficult part of Gopher protocol for today's user could be lack of UTF-8. I don't think about emojis or other special things. Rather about letters of non English alphabet (like "Z with overdot" in "Szczezuja") or (which was also found in my articles) characters like double typographic quotes. Finally ------- So I safely landed in Gophersphere. You can read my content at [Szczezuja's Gopher hole]. I plan to publish there subset of articles from Geminispace (via [Formatting Gemtext for Gopher] script) about Gopher. It's aim to be closer to Gophersphere user, which could be not interested in Gemini. It wasn't so easy, but it's easy. For me easier was to set up Gemini capsule. ==================================================================================================== SlugMax ---------------------------------------------------------------------------------------------------- !Sample gophermap for Gophernicus ## ## This is a sample gophermap. ## # Creating a file called "gophermap" into a directory disables the normal resource listing and replaces it with the contents of the map file. You can also have inline gophermaps - files with a ".gophermap" extension are parsed as gophermaps and displayed in between normal resources in alphabetical order. In a gophermap any line that doesn't contain a character is automatically converted to an type "i" gopher resource which are displayed as plain text in the client. Lines which contain tabs are intepreted as gopher resource lines which the client will render as links. The first line of a gophermap should be a !Title line describing the menu. Dynamic gophermaps are possible by making the gophermap a script and marking it as executable. All script output is parsed just like a static gophermap, for example lines without tabs are converted to "i" resources. Executable gophermaps are always ran through the default shell (/bin/sh) so depending on your operating system that's either slow, or really unbearably slow... The format of a gophermap resource line is simple: Xnameselectorhostport Where: X is the gopher filetype name is an explanation of the resource selector is the path to resource host:port are the hostname and port number to go to Type and name are mandatory. If you don't specify a selector, the name field will be also used as the selector. If you don't specify host or port the host:port of the current server are used instead. Also make sure to use ONLY ONE TAB between the fields. Valid filetypes include: 0 text file 1 directory 3 error message 5 archive file (zip, tar etc) 7 search query 8 telnet session 9 binary file g GIF image h HTML file i info text I generic image file (other than GIF) d document file (ps, pdf, doc etc) s sound file ; video file c calendar file M MIME file (mbox, emails etc) Additional type characters supported by Gophernicus: # comment - rest of the line is ignored !title menu title (use on the first line) -file hide the file from listings :ext=type change filetype (for this directory only) ~ include a list of users with valid ~/public_gopher % include a list of available virtual hosts =mapfile include or execute other gophermap * stop processing gophermap, include file listing . stop processing gophermap (default) Examples of valid resource lines: 1subdir 1Relative internal link subdir 1Absolute internal link /subdir 1External link / gopher.floodgap.com 70 1External relative link (which shouldn't work) subdir/ gopher.domain.dom 70 0Finger-to-gopher link kim holviala.com 79 hLink to a website URL:http://www.google.com/ hLink to a local html page /path/to/file.html 5Link to an tar archive /path/to/archive.tar.gz 9Link to a binary file /path/to/binary 7Search engine query /query 8Telnet session kim holviala.com 79 # Hide a few files from the menu listing generated by * -hiddenfile.txt -hiddendir # Change filetypes for this directory :png=g :foo=b Include links to users own gopherspaces: ~ List all available virtual hosts: % Include sub-gophermap: =LICENSE Execute script and parse output as subgophermap: =/usr/bin/uptime Here we stop processing the gophermap and include the regular menu: * ====================================================================================================