Skip to content

Fix "Cannot read termcap database;" #215

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed

Conversation

orent
Copy link

@orent orent commented Feb 19, 2024

./configure with defaults search path compatible with both FHS and the soon-to-be-deprecated Debian path

https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html#idm236087499712

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1028202

Copy link
Collaborator

@indygreg indygreg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I support the intent of the change.

But the diff as authored is changing the temporary host build of terminfo, not the final build we actually use.

If you go look later in the file, you'll see that we set the following:

--with-terminfo-dirs=/usr/share/terminfo
--with-default-terminfo-dir=/usr/share/terminfo

I think the problem here is that older Debian versions are putting stuff in /lib/terminfo.

Looking at the code in PyOxidizer, I think /etc/terminfo:/lib/terminfo:/usr/share/terminfo might be a reasonably safe default, as that should be compatible with both Debian and RedHat flavored distros.

I'll cherry pick and amend this commit to make the changes.

indygreg added a commit that referenced this pull request Feb 24, 2024
Before, ncurses on Linux was built to look for the terminfo database in
a location that only existed in the build environment

After, it looks for the database in `/etc/terminfo`, `/lib/terminfo`,
and `/usr/share/terminfo`. These are the directory locations that
work on a superset of Debian and RedHat. This hopefully means that
terminfo database resolution "just works" in a lot of common Linux
environments.

As part of this, we add the terminfo database to the ncurses package
artifacts. Then we copy the terminfo database into
`install/share/terminfo` in the CPython distribution if a terminfo
database is present. macOS doesn't distribute a terminfo database
because the system terminfo database should be "good enough."

Closes #215.
indygreg added a commit that referenced this pull request Feb 25, 2024
Before, ncurses on Linux was built to look for the terminfo database in
a location that only existed in the build environment

After, it looks for the database in `/etc/terminfo`, `/lib/terminfo`,
and `/usr/share/terminfo`. These are the directory locations that
work on a superset of Debian and RedHat. This hopefully means that
terminfo database resolution "just works" in a lot of common Linux
environments.

As part of this, we add the terminfo database to the ncurses package
artifacts. Then we copy the terminfo database into
`install/share/terminfo` in the CPython distribution if a terminfo
database is present. macOS doesn't distribute a terminfo database
because the system terminfo database should be "good enough."

Closes #215.
indygreg added a commit that referenced this pull request Feb 25, 2024
Before, ncurses on Linux was built to look for the terminfo database in
a location that only existed in the build environment

After, it looks for the database in `/etc/terminfo`, `/lib/terminfo`,
and `/usr/share/terminfo`. These are the directory locations that
work on a superset of Debian and RedHat. This hopefully means that
terminfo database resolution "just works" in a lot of common Linux
environments.

As part of this, we add the terminfo database to the ncurses package
artifacts. Then we copy the terminfo database into
`install/share/terminfo` in the CPython distribution if a terminfo
database is present. macOS doesn't distribute a terminfo database
because the system terminfo database should be "good enough."

Closes #215.
indygreg added a commit that referenced this pull request Feb 25, 2024
Before, ncurses on Linux was built to look for the terminfo database in
a location that only existed in the build environment

After, it looks for the database in `/etc/terminfo`, `/lib/terminfo`,
and `/usr/share/terminfo`. These are the directory locations that
work on a superset of Debian and RedHat. This hopefully means that
terminfo database resolution "just works" in a lot of common Linux
environments.

As part of this, we add the terminfo database to the ncurses package
artifacts. Then we copy the terminfo database into
`install/share/terminfo` in the CPython distribution if a terminfo
database is present. macOS doesn't distribute a terminfo database
because the system terminfo database should be "good enough." Plus
we don't build ncurses on macOS distributions.

Closes #215.
@indygreg indygreg closed this in 5246d4e Feb 25, 2024
@orent
Copy link
Author

orent commented Feb 25, 2024

RHEL, MacOS, and any other unix descentant other than Debian and its derivatives install terminfo data in /usr/share/terminfo. That is the standard location.

The /etc/terminfo is supposedly for letting administrators locally install a custom termcap entry. This is a truly ancient relic from the time you might have wanted to connect a nonstandard serial terminal to your system that was missing from the terminfo database. I haven't seen it used in 3 decades. In fact, you rarely see any terminal other than xterm these days.

The only purpose served by /etc/termcap is to convince people that setting the default terminfo search path is more complicated than it really is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants