If you are going to offer a reward for something, I figure why screw around. Make it hard, and make it worth it.
So I'm offering a vertical metre of beer as a reward.
I define this as "A metre high pile of slabs/cartons/crates/24-packs/whatever of your favourite non-rediculously-priced beer"
I've offered it once before. The same reward was posted to anyone that could crack Acme::BadExample and make a released version of perl load it normally, without the use of source filters or needing to patch the perl binary.
After submitting a rejected entry that loaded it, but needed a patch to bleadperl, Jos Boumans eventually won it almost a year later when Perl 5.9.2 was released (negating the need for the patch) and the same entry became a winner :)
So I'm offering a new reward to take it's place. This time around you don't even need to write any code to win it.
A metre of beer, as well as my unending respect, is offered for the following.
--------------------------------------------------------
1. An installation of Perl for Windows.
2. Said Perl must be current or relative new. 5.8.7 or higher.
3. Said installation MUST be in the form of an .msi or equivalent installer, to be installed directly on a fresh Windows intall without additional prerequisites.
4. The installer MUST also install a (legal) compiler (preferably gcc), preconfigured to work normally when installing XS modules from CPAN.
5. The installer should be able to be freely redistributed under normal perl terms and used on a variety of NT-based Windows operating systems equal to or newer than Windows 2000.
6. Once installed, Perl MUST be able to install modules direct from CPAN using the CPAN shell. (The installer doesn't need to preconfigured CPAN.pm) This also includes XS-based modules.
Clarification:
6b. CPAN MUST work in an Firewall/NAT/ADSL-type environments WITH passive-level FTP, but without full bidirection FTP, due to the sheer volume of Windows hosts in this situation. A solution which only works on public IPs is not enough. See below for details.
7. A build script or some form of build instructions should be provided, such that any other presumed-competant sysadmin should be able to replicate the process for newer Perl or Windows releases.
8. There is NOT an expectation that everything be your own work, you may (legally) use any other project as a base or mercilessly (legally) steal code, as long as the above conditions are met.
9. The winner is defined as the first person to post a working URL to the installer in a bottom-level comment below, and emails me to say they completed it. The winner may be an individual, a syndicate or even an entire PerlMongers group.
--------------------------------------------------------
That's it. I just want a Windows Perl installer that works and can install XS modules from CPAN normally, as we might expect from a Linux install.
I don't need or want a full blown ActiveState replacement with a ton of modules precompiled and bundled in, in fact I'd prefer it it JUST had the default Perl install only.
And that's it... you don't need to code, you just need to know or work out how to build Perl on Windows, set up a compiler and then from that build an installer.
I want to start bulk testing modules on Win32. And I need a stock Perl install that I can just run an installer to get, and that will work. It doesn't seem that hard, but I've watched it now defeat a number of good sysadmins and developers.
If anyone has comments that might give clues to the contestants, I'd love to hear them.
http://www.indigostar.com/indigoperl.htm#GUI%20Package%20Manager
uri
ps. did i say how much i hate web interfaces for text stuff like replies to blogs?
Re:most of this seems to be in indigo perl
Alias on 2006-01-22T20:08:44
Interesting. I've emailed them.
For those playing along at home, this does B constitute a winning response, as it fails points 3, 4, 5 and 7.
Re:most of this seems to be in indigo perl
Alias on 2006-01-22T20:10:18
eeep!
That will teach me to use POD in a HTML entry. To repeat, it does B<not> constitute a winner response.
Re:PXPerl
Alias on 2006-01-22T22:05:31
I've been watching PXPerl for a while, and it's bloody close.
But unfortunately the original author has gone AWOL and not been heard from in 2 months.
It currently fails points 4 and 7.
If someone can fix that so that the compiler stuff all installs as well, the reward is yours to allocate as you see fit. The PXPerl author certainly isn't around to claim the prize at the moment...Re:PXPerl
sigzero on 2006-01-25T13:39:30
The PXPerl website explains what is happening. The author is a student and is rather busy at the moment. I would rather see someone step in to help kick PXPerl over the top. It is *really* close.
For me I'd like to see point 2 be Perl 5.6.1 or higher. There are still a lot of Perl apps out there running 5.6.1 for various reasons. I still get emails from people who find my CPAN testers reports asking about installing modules on Windows for 5.6.1.
Re:Earlier Perls
stennie on 2006-01-24T18:40:34
fwiw, here's an installer to test based on perl 5.6.1:
http://stennie.org/camelpack/setup56.exe
You should also be able to install just gcc and nmake to enable compiling with an existing activeperl install.
Cheers,
Stephen
Re:Earlier Perls
barbie on 2006-01-25T11:30:37
Excellent work. Wish I could be there at the presentation. Still, I'm sure Mike Bissett will help out with the Birmingham.pm congratulations
;)
Re:A Windows installer installer for perl + gcc ;)
fireartist on 2006-01-23T17:22:18
I managed to get it to compile after adding the ISX Download DLL files to the same directory as the camelpack.iss file.
During installation, I only checked the mingw installation, to save some time.
Installation failed, it couldn't find the file it thought it had downloaded to the tmp directory.
I tried to uninstall, that failed with
'an attempt was made to expand the "app" constant but Setup didn't create the "app" dir'
so the program (listed as "2006.1" in add/remove programs) is still there.
Exactly how did you get inno/isx to install cleanly and see each other?
And did you manage to get it to uninstall cleanly?Re:A Windows installer installer for perl + gcc ;)
stennie on 2006-01-23T17:57:33
Hey fireartist.. thx for your feedback, I'll test this out. Looks like I may have messed up the uninstall options on the uploaded version. There's no actual app to remove at the moment (it's calling other installers, which have their own uninstallers) .. so there shouldn't be an add/remove entry.
Regarding inno/isx, I installed:
- Innosetup
- IStool
- IStool download DLL.. then did any compiling/editing via ISTool. fwiw, ISTool seemed to have the download DLL properly registered without copying to the project directory.
Cheers,
StephenRe:A Windows installer installer for perl + gcc ;)
stennie on 2006-01-23T22:43:48
FYI, have uploaded a corrected version with the "uninstall" options removed.If you need to remove a bogus uninstall entry, the path in regedit to delete is:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{2C93664
8 -0116-46EA-9398-49258B6325C3}Cheers,
StephenRe:A Windows installer installer for perl + gcc ;)
Alias on 2006-01-24T05:27:53
Since my Microsoft Action Pack just arrived, I'm setting up a fresh installation of XP inside a new, clean, virtual image. I should have a confirmation of rejection in a few hours.Re:A Windows installer installer for perl + gcc ;)
Alias on 2006-01-24T05:29:55
God I wish you could edit comments...
"confirmation OR rejection"Rejected, just.
Alias on 2006-01-24T13:32:49
OK, having had time to install it, here's an official report card.
1. Pass
2. Pass
3. Pass (with comment)
While I'm a bit iffy about not having the other installers embedded, it did work just fine, and since the goal is to install from CPAN, requiring a network connection for the installation isn't unreasonable. So Pass.
4. Pass
5. Pass
6. Fail (with comment)
Running the installation inside the image worked, but the CPAN.pm first-time configuration process failed utterly. After 2 hours of debugging and 4 new RT bugs for CPAN.pm my conclusion is that the version of CPAN.pm you installed cannot get the MIRRORED.BY file, and thus cannot be configured, unless the installation is on a host with a public IP or the user knows their own FTP Proxy. CPAN.pm first time setup would not appear to support or be set for even passive FTP, or provide any option for dealing with a lack of full two-way FTP connection.
Since this rules out pretty much everyone inside a NAT or on a broadband router, a massive number of Windows hosts would not be able to install from CPAN. Since the rules of the competition explicitly say that you are responsible for the entirity with no credit to anyone who's source work you used, I can't see how I could assign blame to ActiveState and mark it a pass. So Fail, with the note that CPAN should be able to be configured inside a NAT or some other environment WITH passive FTP access. For situations without FTP access at all, or auth proxies and such, I can't see how I could blame you. But limited passive-only FTP access is so common I can't see how I could allow it to be a pass.
In short, FAILSFORME.
7. Pass
8. Pass (and excellent use of the rule to suck in ActivePerl etc)
9. N/A
----------------------
Total: FAIL 7/8 passed
----------------------
If you can make CPAN.pm work after installation with only passive FTP access, let me know so I can retest.
Re:Rejected, just.
Alias on 2006-01-24T16:36:41
After talking with fireartist regarding vanillaPerl, it would appear that with the new Windows firewall + other reasons there's no way we'd ever want FTP to _not_ use passive.
So the recommendation is to set FTP_PASSIVE=1 at the system level in.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Re:Rejected, just.
stennie on 2006-01-24T17:58:47
OK, have updated the installer to set FTP_PASSIVE by default; please retest.
Cheers,
Stephen
Just as an alternative to stennie's above, here's one that uses a built-from-source perl, rather than ActiveState's
(I don't like that I can't distribute PAR-built exe's built using AS's perl unless I get written permission)
You'll need this zip file: http://www.fireartist.com/tmp/vanillaPerl5.8.7.zip (41.5 KB)
Unzip the file in c:\
it'll create a folder named c:\vanillaPerl5.8.7
Just follow the instructions in c:\vanillaPerl5.8.7\build\installer.txt
This is a very basic installation including perl5.8.7, gcc3.4.5, dmake and some programs from unixutils.
There's an option to not install the start-menu icons - these are: a link to the cpan
binary; a link to search.cpan.org and a link to the uninstaller.
At the end of the installation process you'll be shown which paths you need to add to your PATH environment.
This is suitable for automated testing, etc.
You can get the full ready-to-use installation here: http://www.fireartist.com/tmp/vanillaPerl5.8.7.exe (15.3 MB)
But please only download this if you need to, I'll be monitoring my bandwidth usage and will have to remove the file if I get near my monthly limit.
I'll shortly be updating the instructions to support automatically editing the PATH environment on both install and uninstall.
I've also lately been working on a script that will download and install pre-compiled modules from kobes cpan mirror - this is useful for modules that are still hard to install, such as DBD-mysql
, DBD-sqlite
and FCGI
. Hopefully this can be incorporated.
Tips
cpan
at a command prompt..cpan
it will be placed at c:\.cpan
- I recommend you be explicit, for example c:\vanillaPerl5.8.7\perl\.cpan
gzip.exe
, tar.exe
and wget.exe
A perl-level issue to be aware of is: you can't use cpan
to upgrade a core module such as CPAN
or File::Spec
because MSWindows won't let a
I've tried building perl5.6.1, but it failed. I expect if an older version of mingw were used, it should work ok.
Re: I hereby offer a reward of a vertical metre of
fireartist on 2006-01-24T14:53:35
I've updated both the files - it now sets the PATH during install and uninstall.Rejected.
Alias on 2006-01-24T17:24:51
For the benefit of the other contestants, at time of writing, vanillaPerl is a FAIL. I'm in discussion with the author, so I'll just summarise.
- Doesn't set FTP_PASSIVE=1
- gzip.exe crashes
- Other minor CPAN.pm issues that might be fixed by the above being corrected.
So at this time the contest is still open, with no winner, but two contestants closing in on the prize!
Re: I hereby offer a reward of a vertical metre of
demerphq on 2006-01-25T17:38:16
A perl-level issue to be aware of is: you can't use cpan to upgrade a core module such as CPAN or File::Spec because MSWindows won't let a.dll file be overwritten while it's in use. (I know there's people are looking at this issue). Its not a perl level issue at all. On win32 you can't delete open files. Period. Any installer will end up confronting this issue. Its the reason for the dreaded "you must reboot your machine" messages that are so well known in the Windows world.
Some install techniques on windows are more suceptable to this issue than others, with Module::Build and CPAN particularly so as they use the things they are installing to do the install. EU::MM modules are less so as the install process is actually done by nmake.exe which means that the installer is less likely to have open the same files as are being installed. So as an example often with a EU::MM install if it fails you can exit out of CPAN and go to the build directory and run 'nmake install' and it will work fine as perl is no longer running and keeping those files open.
So IMO this shouldn't be characterized as a bug. Its a general win32 annoyance that is difficult to work around no matter what you do.
Re: I hereby offer a reward of a vertical metre of
fireartist on 2006-01-26T08:24:37
Thanks for the clarification ++
Maybe CPAN / M::B could get round it, if libwin32 is installed, by adding a registry entry in the relevant 'run once' key, and asking the user to reboot.
I'd personally find it quite amusing seeing cpan say "installation finished, please reboot to continue"!
I suppose a problem would be if it happens when installing a prerequisite. Would it be sufficient for cpan to say, "please reboot, then run 'install Foo' again", rather than try to remember the state it was in?