# mytop-1.7 env: /usr/local/bin/perl5.24.2: No such file or directory



## lifeboy (Aug 12, 2017)

I want to install mytop with mariadb102-server / client, but pkg insists on installing mysql56... :-(  So I'm trying to built mytop from ports.  (/usr/ports/databases/mytop)


```
# make install clean
===>   mytop-1.7 depends on package: perl5>=5.24<5.25 - found
===>  Configuring for mytop-1.7
env: /usr/local/bin/perl5.24.2: No such file or directory
*** Error code 127
```
However:

```
# pkg search perl5-*
perl5-5.24.1_1                 Practical Extraction and Report Language
perl5-devel-5.27.1.72          Practical Extraction and Report Language
perl5.22-5.22.3_1              Practical Extraction and Report Language
perl5.26-5.26.0                Practical Extraction and Report Language
```

There is no perl5.24.2 ??  Anyway, 5.24.1 satisfies perl5>=5.24<5.25

How to I fix this please?


----------



## tobik@ (Aug 12, 2017)

lifeboy said:


> How to I fix this please?


You are apparently using quarterly packages and are using a non-matching ports tree branch in combination with it. A recipe for disaster. Either switch your system to latest packages or switch to the 2017Q3 ports tree branch to match the ports framework with the packages you have installed.


----------



## lifeboy (Aug 12, 2017)

I'm not sure I follow...  this is a clean installation on which I simply did "portsnap auto"...   So whatever I'm using is default on FreeBSD 11.0 then?  How to I change that?

```
11.0-RELEASE-p9 FreeBSD 11.0-RELEASE-p9 #0: Tue Apr 11 08:48:40 UTC 2017
```
Should I create the file /usr/local/etc/pkg/repos/FreeBSD.conf

```
FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest"
}
```
and then do `pkg upgrade -f` ?


----------



## tobik@ (Aug 12, 2017)

lifeboy said:


> this is a clean installation on which I simply did "portsnap auto"...


Yes, all FreeBSD releases since 10.2 are using quarterly packages by default. portsnap(8) downloads a snapshot of the HEAD branch of the ports tree.



lifeboy said:


> Should I create the file /usr/local/etc/pkg/repos/FreeBSD.conf


Yes, if you want to use the latest packages.  The alternative would be to checkout the 2017Q3 branch of the ports tree with e.g. `svnlite co https://svn.freebsd.org/ports/branches/2017Q3 /usr/ports` (delete or move the existing /usr/ports out of the way first).


----------



## lifeboy (Aug 12, 2017)

After adding the /usr/local/etc/pkg/repos/FreeBSD.conf and upgrading the packages, mytop is now busy compiling.  Thanks for the headsup!


----------



## scotia (Feb 9, 2018)

tobik@ said:


> You are apparently using quarterly packages and are using a non-matching ports tree branch in combination with it. A recipe for disaster. Either switch your system to latest packages or switch to the 2017Q3 ports tree branch to match the ports framework with the packages you have installed.



tobik@ shouldn't this just work regardless of the revision of the ports tree?  In lifeboy's case (and the one I am also experiencing right now), the dependency is met.  My case is: 
	
	



```
p5-XML-Parser-2.44 depends on package: perl5>=5.24<5.25 - found
```
  There is no functional impediment to the installing package running.  Great, keep building.

But of course I get 
	
	



```
env: /usr/local/bin/perl5.24.3: No such file or directory
```
 and the build stops.  If I were to symlink my PERL binary to the expected binary, the port will install and run just fine.  Surely the build failing here is a bug.  The port's dependencies are met but the system won't install it (and while it's at it break the POLA).

Where is the code that points to the specific PERL version?  Not in the port itself - it doesn't care (so long as it's perl5>=5.24<5.25).  If I were to raise a PR do you reckon it be considered or laughed out of town?

Thanks,
Scott


----------



## SirDice (Feb 9, 2018)

scotia said:


> Where is the code that points to the specific PERL version? Not in the port itself


Perl is set as part of the framework to allow you to switch to different versions, see /usr/ports/Mk/bsd.default-versions.mk. But changing the default versions only works when you build from ports. Packages have pre-set defaults, options and dependencies that cannot be changed once a package is created.


----------



## scotia (Feb 9, 2018)

Thanks SirDice.  Would setting 
	
	



```
DEFAULT_VERSIONS+=  perl5=5.24.2
```
 help any?

Still, my point remains: from a novice's perspective the port finds a valid version of PERL and then immediately bails, which is confusing.  Either I'm on my own thinking this is a bug, or it is a bug (and is possibly hard to fix).


----------



## SirDice (Feb 9, 2018)

No, that's a version it doesn't understand. Besides that, the default is already set to 5.24.


```
# Possible values: 5.22, 5.24, 5.26, devel
PERL5_DEFAULT?=         5.24
```


----------



## scotia (Feb 9, 2018)

SirDice, fair enough.  But as to my other point?  I have a valid dependency which the ports system won't honour.


----------



## SirDice (Feb 9, 2018)

What does `pkg info -x perl` return?


----------



## scotia (Feb 9, 2018)

```
# pkg info -x perl
perl5-5.24.2
```

which completely satisfies 
	
	



```
p5-XML-Parser-2.44 depends on package: perl5>=5.24<5.25 - found
```


----------



## SirDice (Feb 9, 2018)

One of the hardlinks might be broken, what does `ls -li /usr/local/bin/perl* /usr/bin/perl*` output?

It should output something like this:

```
# ls -li /usr/local/bin/perl* /usr/bin/perl*
1205087 -rwxr-xr-x  3 root  wheel   7704 Oct  8 17:55 /usr/local/bin/perl
1205087 -rwxr-xr-x  3 root  wheel   7704 Oct  8 17:55 /usr/local/bin/perl5
1205087 -rwxr-xr-x  3 root  wheel   7704 Oct  8 17:55 /usr/local/bin/perl5.24.3
1205088 -rwxr-xr-x  2 root  wheel  45405 Oct  8 17:54 /usr/local/bin/perlbug
1205089 -rwxr-xr-x  1 root  wheel    274 Oct  8 17:54 /usr/local/bin/perldoc
1205090 -rwxr-xr-x  1 root  wheel  10829 Oct  8 17:54 /usr/local/bin/perlivp
1205088 -rwxr-xr-x  2 root  wheel  45405 Oct  8 17:54 /usr/local/bin/perlthanks
```
Note that perl, perl5 and perl5.24.3 all point to the same inode, so these are hardlinked.


----------



## scotia (Feb 9, 2018)

All of the perls are the name inode:


```
# ls -li /usr/local/bin/perl* /usr/bin/perl*
 66957 lrwxr-xr-x  1 root  wheel     19 Aug 16 11:23 /usr/bin/perl -> /usr/local/bin/perl
125710 -rwxr-xr-x  3 root  wheel   6316 Aug 12 18:42 /usr/local/bin/perl
125710 -rwxr-xr-x  3 root  wheel   6316 Aug 12 18:42 /usr/local/bin/perl5
125710 -rwxr-xr-x  3 root  wheel   6316 Aug 12 18:42 /usr/local/bin/perl5.24.2
125711 -rwxr-xr-x  2 root  wheel  45406 Aug 12 18:36 /usr/local/bin/perlbug
125712 -rwxr-xr-x  1 root  wheel    274 Aug 12 18:36 /usr/local/bin/perldoc
125713 -rwxr-xr-x  1 root  wheel  10829 Aug 12 18:36 /usr/local/bin/perlivp
125711 -rwxr-xr-x  2 root  wheel  45406 Aug 12 18:36 /usr/local/bin/perlthanks
```


----------



## xmassacre (Feb 12, 2018)

scotia, try to update your ports: https://www.freebsd.org/doc/handbook/ports-using.html


----------



## SirDice (Feb 12, 2018)

Remove the symlink at /usr/bin/perl, it shouldn't exist.


----------



## scotia (Feb 13, 2018)

*xmassacre , SirDice *

Guys, the gist of this (recently hijacked, by me) thread is the fact that the ports system breaks the POLA by first saying:

```
p5-XML-Parser-2.44 depends on package: perl5>=5.24<5.25 - found
```
then immediately saying:

```
env: /usr/local/bin/perl5.24.3: No such file or directory
```

Do you not also find this to be an odd pair of messages?  I'll paraphase what PORTS is saying:

```
This port requires a certain version of PERL, which I have found.
I cannot find the version of PERL this port requires.
```

xmassacre: I'm reluctant to say "updating ports fixed the problem" because it has wallpapered over the problem.
SirDice: That symlink definitely should exist on some of my systems.  I've read ports/UPDATING but neither the env nor the using-yet-another-hardcoded-perl-shebang solution suits my needs (sometimes).


----------



## tobik@ (Feb 13, 2018)

If you think so then why don't you file a bug? There is no point in arguing about it here on the forums. Let the Perl maintainers take a look at it. They know that part of the ports framework the best.


scotia said:


> the ports system breaks the POLA


POLA means something different to everbody and I think you can make your case without mentioning POLA.  It's not clear if the ports framework isn't trying to prevent a bigger POLA violation than what you're seeing by refusing to install a bunch of broken ports.

Perl 5.24.2 is pretty old by now, is marked vulnerable, and if you haven't updated your system since September then you'll likely run into more trouble sooner or later if you use an updated ports tree.


----------



## scotia (Feb 13, 2018)

Will do tobik@.  I'll see what happens.

While I agree that POLA is in the eye of the interpreter, i find the self-contradiction in the ports messages astonishing.  Insofar as the user has no clear next step.

I'm mildly surprised that no-one else feels that those messages are confusing to a user.  But that's my problem.

Scott


----------

