On 16 Oct 2012, at 16:13, David T. Lewis <[email protected]> wrote:
> If you don't want to do it in the VM, you can do it with a shell script.
> Just make a 512 byte file that starts with the shebang line that you
> want to use, prepend it to the saved image file (with /bin/cat) and set
> file mode executable (chmod).
Well, I tried on my Ubuntu server, and I could't get it to work.
I have a Pharo 2.0 image and a little test script called run.st
$ cat run.st
NonInteractiveTranscript stdout install.
!
| webSocket |
webSocket := ZnWebSocket to: 'ws://localhost:8080/ws-echo'.
[
webSocket sendMessage: 'Pharo Smalltalk using Zinc WebSockets'.
Transcript show: webSocket readMessage; cr ] ensure: [ webSocket close ].
!
Smalltalk quitPrimitive.
I wrote another small Smalltalk script to generate the header (just to be sure)
$ cat write-header.st
'header.bin' asFileReference writeStreamDo: [ :stream | | line |
line := '#!!/home/ubuntu/smalltalk/bin/CogVM -vm-display-null
-vm-sound-null -plugins /home/ubuntu/smalltalk/bin/'.
stream
binary; nextPutAll: line asByteArray; nextPut: 10;
nextPutAll: (ByteArray new: 511 - line size) ].
!
Smalltalk quitPrimitive.
Now I have a 512 byte header that looks like this
$ hexdump -C header.bin
00000000 23 21 2f 68 6f 6d 65 2f 75 62 75 6e 74 75 2f 73 |#!/home/ubuntu/s|
00000010 6d 61 6c 6c 74 61 6c 6b 2f 62 69 6e 2f 43 6f 67 |malltalk/bin/Cog|
00000020 56 4d 20 2d 76 6d 2d 64 69 73 70 6c 61 79 2d 6e |VM -vm-display-n|
00000030 75 6c 6c 20 2d 76 6d 2d 73 6f 75 6e 64 2d 6e 75 |ull -vm-sound-nu|
00000040 6c 6c 20 2d 70 6c 75 67 69 6e 73 20 2f 68 6f 6d |ll -plugins /hom|
00000050 65 2f 75 62 75 6e 74 75 2f 73 6d 61 6c 6c 74 61 |e/ubuntu/smallta|
00000060 6c 6b 2f 62 69 6e 2f 0a 00 00 00 00 00 00 00 00 |lk/bin/.........|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
Then I concatenate the header and the working image
cat header.bin zinc.image > magic.image
and I copy the changes and make the image executable.
The image still works
$ /home/ubuntu/smalltalk/bin/CogVM -vm-display-null -vm-sound-null -plugins
/home/ubuntu/smalltalk/bin/ magic.image run.st
Pharo Smalltalk using Zinc WebSockets
But not when run directly
$ ./magic.image
Segmentation fault (core dumped)
Any hints ?
Thx,
Sven
--
Sven Van Caekenberghe
http://stfx.eu
Smalltalk is the Red Pill