Archive: Modifying Installers in Linux


Modifying Installers in Linux
I thought perhaps that I could modify a file in an installer created in NSIS with the Windows 'zip' command by running the following:
[list=1][*]echo "Referer: ..." > referer.txt[*]zip -J example1.exe [*]zip -u example1.zip referer.txt [*]zip -A example1.exe [/list=1]

For those unfamiliar with Info-Zip: #2 strips the SFX stub, #3 updates the file in the zip archive and #4 adds the SFX stub back again.

And that perhaps I'd be able to compile Info-Zip to do this in Linux (ie. modify Windows SFX files in Linux). Well, it appears I can't even do this with Info-Zip in Windows, so that's not going to work. I tried all the compression options. It's probably obvious to everyone else but me that NSIS doesn't create zip-compatible SFX files. (Please tell me I'm wrong!)

Is there an easy solution to this without running a Windows server?

I have an installer for a client application which offered for download via an Apache/Linux server. I want my Apache/Linux server to tag installers before each download with referer info for that particular user. That way when the user registers (via the client they just downloaded and installed), I know where they heard about the application.

I've also looked at NSIS Self-Extractor but that doesn't seem to be what I want either.

Thanks in advance everyone.

EDIT: I tried using UPX to pack the EXE. After adding the proper !packhdr line to my .nsi file:

!packhdr "$%TEMP%\exehead.tmp" '"C:\Progra~1\UPX\upx.exe" "$%TEMP%\exehead.tmp"'
MakeNSISW seems to be using UPX. But, if I run 'upx -t example1.exe' on the binary output by MakeNSISW it says "not packed by UPX".

NSIS creates SFX but not SFX archives. The internal data structure of the installers is not an archive and not a zip file. You can't change it using any zip application.

For your specific need, you can either create the installer on Linux using WINE or using makensis for Linux; or you can simply tack that data to the installer. Its CRC check will not fail because of this.