alien-libssh-core

Documents the Alien::libssh distribution's alienfile, static share build, and Net::LibSSH consumer contract.

1|Updated Mar 29, 2026
One-click install
npx skills add https://github.com/Getty/p5-alien-libssh --skill alien-libssh-core-getty
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: alien-libssh-core
Source: https://github.com/Getty/p5-alien-libssh/tree/main/.claude/skills/alien-libssh-core
Command: npx skills add https://github.com/Getty/p5-alien-libssh --skill alien-libssh-core-getty

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Working on the Alien::libssh Perl distribution requires knowing non-obvious build facts: the bundled libssh must build out-of-source and statically, its generated libssh.pc omits Libs.private so -lcrypto and -lz must be appended, and both system and share install paths must be verified. This Skill captures those facts so changes to the alienfile, bundled tarball, or link line don't silently break the XS consumer Net::LibSSH. ## Core Features & Use Cases - Build system guidance: Explains the PkgConfig probe path, the offline CMake share build of share/libssh-0.10.6.tar.xz, and why -DBUILD_SHARED_LIBS=OFF and out-of-source builds are mandatory. - Link-line fix: Documents the after 'gather' hook that appends -lcrypto -lz to libs and libs_static, preventing undefined symbol errors like EVP_PKEY_CTX_new at consumer load time. - Upgrade and verification workflow: Gives the checklist for bumping the bundled libssh tarball and the three dzil test invocations (default, forced share, forced system) required before release. - Use Case: When upgrading the bundled libssh to a new version, follow the Skill's steps: swap the single tarball under share/, update the alienfile start_url, Changes, and version strings, then run the forced share build to confirm Net::LibSSH still links. ## Quick Start Ask the agent to force a share build of Alien::libssh with ALIEN_INSTALL_TYPE=share and explain any link errors against the static build rules.

Frequently Asked Questions about alien-libssh-core

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I upgrade the bundled libssh version in Alien::libssh?

Remove the old tarball with git rm, add exactly one new tarball under share/, update the start_url filename in the alienfile, note the change in Changes under {{$NEXT}}, sync version strings in README.md and CLAUDE.md, then run a forced share build with ALIEN_INSTALL_TYPE=share dzil test.

Why does Net::LibSSH fail with undefined symbol EVP_PKEY_CTX_new?

The generated libssh.pc has no Libs.private, so static linking misses libssh's own dependencies. The alienfile's after 'gather' hook appends -lcrypto -lz to libs and libs_static; it must run after PkgConfig's gather or the bare link line wins.

Does Alien::libssh require network access to install?

No. The share build uses Fetch::Local with a file:// start_url pointing at the bundled share/libssh-0.10.6.tar.xz, so offline installation is guaranteed. Never add a network start_url or a second tarball.

Why does the Alien::libssh share build use static libraries?

A shared libssh.so in the Alien prefix is invisible to the runtime linker, so XS consumers compile but die with libssh.so.4: cannot open shared object file. Building with -DBUILD_SHARED_LIBS=OFF avoids the rpath problem entirely.

How do I test both install paths of an Alien distribution?

Run dzil test three ways: unforced, with ALIEN_INSTALL_TYPE=share to force the bundled build, and with ALIEN_INSTALL_TYPE=system to force the pkg-config probe. prove -l t is insufficient because nothing has been built.