Bug 237768

Summary: fortune(6): /usr/share/games/fortune is populated, No fortunes found in /usr/share/games/fortune:/usr/local/share/games/fortune.
Product: Base System Reporter: Trix Farrar <trix>
Component: binAssignee: freebsd-bugs (Nobody) <bugs>
Status: Open ---    
Severity: Affects Some People CC: andyf, carson+freebsdbugs, grahamperrin, nipkraps, tatsuki_makino
Priority: --- Keywords: needs-qa
Version: 13.1-RELEASE   
Hardware: Any   
OS: Any   
URL: https://www.freebsd.org/cgi/man.cgi?query=fortune&sektion=6&manpath=FreeBSD
Attachments:
Description Flags
Patch to allow the fortune command to look for all fortunes in the fortune directory by default none

Description Trix Farrar 2019-05-06 23:18:34 UTC
Calling fortune(6) with no filename results in an error.  I believe this may be a regression from behavior in 11.2-RELEASE.

12.0-RELEASE behavior:

$ uname -a ; fortune ; ls -lh /usr/share/games/fortune/
FreeBSD doyle 12.0-RELEASE-p2 FreeBSD 12.0-RELEASE-p2 GENERIC  amd64
No fortunes found in /usr/share/games/fortune:/usr/local/share/games/fortune.
total 24
-r--r--r--  1 root  wheel    19K Nov 25 00:44 freebsd-tips
-r--r--r--  1 root  wheel   944B Nov 25 00:44 freebsd-tips.dat
$ 


11.2-RELEASE behavior:

$ uname -a ; fortune ; ls -lh /usr/share/games/fortune/
FreeBSD lorne 11.2-RELEASE-p4 FreeBSD 11.2-RELEASE-p4 #0: Thu Sep 27 08:16:24 UTC 2018     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
If pro is the opposite of con, what is the opposite of progress?
total 2620
-r--r--r--  1 root  wheel   2.1M Jun 21  2018 fortunes
-r--r--r--  1 root  wheel    97K Jun 21  2018 fortunes.dat
-r--r--r--  1 root  wheel    16K Jun 21  2018 freebsd-tips
-r--r--r--  1 root  wheel   840B Jun 21  2018 freebsd-tips.dat
-r--r--r--  1 root  wheel    25K Jun 21  2018 gerrold.limerick
-r--r--r--  1 root  wheel   680B Jun 21  2018 gerrold.limerick.dat
-r--r--r--  1 root  wheel   127K Jun 21  2018 limerick
-r--r--r--  1 root  wheel   6.1K Jun 21  2018 limerick.dat
-r--r--r--  1 root  wheel    59K Jun 21  2018 murphy
-r--r--r--  1 root  wheel   767B Jun 21  2018 murphy-o
-r--r--r--  1 root  wheel   112B Jun 21  2018 murphy-o.dat
-r--r--r--  1 root  wheel   6.1K Jun 21  2018 murphy.dat
-r--r--r--  1 root  wheel    27K Jun 21  2018 startrek
-r--r--r--  1 root  wheel   1.6K Jun 21  2018 startrek.dat
-r--r--r--  1 root  wheel    38K Jun 21  2018 zippy
-r--r--r--  1 root  wheel   4.3K Jun 21  2018 zippy.dat
$ 

It appears that, when called without a filename, the command only searches for 'fortunes', which does not exist in Base -- only freebsd-tips is present.

Given a filename -- either basename(1) for full path -- epigrams are selected as expected.  The search path appears to function as expected.  

Easy workaround appears to be either change the default filename ('fortunes') or rename /usr/share/games/fortune/freebsd-tips to /usr/share/games/fortune/fortunes (with their compiled versions named appropriately, for course).

Calling "fortune all" appears to work as expected, pulling from all available files in the search path.
Comment 1 Andy Farkas 2019-11-11 14:54:07 UTC
Copying freebsd-tips to fortunes does not work:

# cd /usr/share/games/fortune
# cp freebsd-tips fortunes
# fortune
fortune:/usr/share/games/fortune/fortunes not a fortune file or directory
No fortunes found in /usr/share/games/fortune:/usr/local/share/games/fortune.
Comment 2 Ruby Lazuli Lord 2020-03-19 18:06:38 UTC
Created attachment 212535 [details]
Patch to allow the fortune command to look for all fortunes in the fortune directory by default

It's worth noting that copying the text-based fortune file isn't enough for fortune to recognize it; a corresponding .dat file must be made with "strfile myfortunes".

I've attached a patch based off of FreeBSD-CURRENT that should allow fortune to look in all fortune files in the directory by default (should I submit this patch as a new bug report? Contributing to FreeBSD doesn't seem to mention whether or not a new report should be filed for patches if a bug report already exists).
Comment 3 Graham Perrin freebsd_committer freebsd_triage 2022-12-10 14:51:29 UTC
root@fuji:~ # freebsd-version -kru
13.1-RELEASE-p3
13.1-RELEASE-p3
13.1-RELEASE-p5
root@fuji:~ # fortune
No fortunes found in /usr/share/games/fortune:/usr/local/share/games/fortune.
root@fuji:~ # ls /usr/share/games/fortune
freebsd-tips            freebsd-tips.dat
root@fuji:~ # ls /usr/local/share/games/fortune
ls: /usr/local/share/games/fortune: No such file or directory
root@fuji:~ # 


Triage: assume that this is not hardware-specific.
Comment 4 Tatsuki Makino 2022-12-17 06:10:13 UTC
Murphy's Law and others were removed from fortune here.
https://cgit.freebsd.org/src/commit/usr.bin/fortune?id=0538d7bbe620fafcdf296305bcd8aad2cb7d24f1

When there were no arguments, one file called fortunes is automatically added here.
https://cgit.freebsd.org/src/tree/usr.bin/fortune/fortune/fortune.c?id=195f1b124da4bf73d951cd251dffd9485672fe0a#n387

It seems that xxx and xxx.dat in the fortune file must be a pair, so the revert method challenged above is missing something.
The following procedure will restore it.

cd /usr/share/games/fortune
ln -s freebsd-tips fortunes
ln -s freebsd-tips.dat fortunes.dat
fortune

I think we should make this symlink the default to create :)
Comment 5 Tatsuki Makino 2024-02-29 04:11:36 UTC
My comment #4 is rescinded.

2 directories will be used by FORTDIR.
It is written in /usr/src/usr.bin/fortune/fortune/pathnames.h
And fortunes.dat can be installed by misc/fortune-mod-freebsd-classic of ports.
Creating extra symlinks will fluctuate the odds of a fortune.