pharo-project / pharo-launcher

Lets you manage your pharo images and download new ones
https://pharo-project.github.io/pharo-launcher/
MIT License
108 stars 46 forks source link

PharoLauncher-linux-3.0.1-x64 not working #589

Closed welblaud closed 1 year ago

welblaud commented 1 year ago

Bug description

The launcher creates the image but it won't start.

To Reproduce

  1. start the launcher via terminal: ./pharo-launcher
  2. create an image (no matter whether version 10, 11, mooc or so)
  3. click Run

Expected behavior

The image should start.

Version information:

Additional context The log:

./pharo-launcher 

Process>>doTerminationFromAnotherProcess
Process>>terminate
PhLImageDescriptionUpdater>>terminateProcess
PhLImageDescriptionUpdater>>image:description:
PhLImageDescriptionUpdater class>>image:description:
PhLImageDetailPresenter>>updateImageDescription:
[ :text | self updateImageDescription: text ] in PhLImageDetailPresenter>>connectPresenters in Block: [ :text | self updateImageDescription: text ]
FullBlockClosure(BlockClosure)>>cull:
FullBlockClosure(BlockClosure)>>cull:cull:
[ :block | block cull: self value cull: oldValue ] in ObservableValueHolder>>valueChanged: in Block: [ :block | block cull: self value cull: oldValue ]...etc...
OrderedCollection>>do:
ObservableValueHolder>>valueChanged:
[ | oldValue |
    oldValue := value.
    value := anObject.
    self valueChanged: oldValue ] in ObservableValueHolder>>value: in Block: [ | oldValue |...
FullBlockClosure(BlockClosure)>>ensure:
ObservableValueHolder>>value:
SpTextPresenter(SpAbstractTextPresenter)>>text:
[
        self presenter text: aString.
        "Raise an announcement"
        self presenter changed: #clearUserEdits] in SpMorphicTextAdapter(SpMorphicBaseTextAdapter)>>accept:notifying: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
SpMorphicTextAdapter(SpMorphicBaseTextAdapter)>>accept:notifying:
SpMorphicTextAdapter>>accept:notifying:
SpRubScrolledTextMorph(RubScrolledTextMorph)>>acceptTextInModel
SpRubScrolledTextMorph(RubScrolledTextMorph)>>acceptContents
SpRubScrolledTextMorph(RubScrolledTextMorph)>>textChanged
RubTextScrollPane>>textChanged
RubEditingArea(RubAbstractTextArea)>>paragraphReplacedTextFrom:to:with:
[ 
            self composer emphasisHere: textArea emphasisHere.
            self composer replaceFrom: start to: stop with: aText.
            self text: self composer text.
            textArea paragraphWasComposedFrom: start to: stop.
            textArea paragraphReplacedTextFrom: start to: stop with: aText ] in RubParagraph>>replaceFrom:to:with: in Block: [ ...
FullBlockClosure(BlockClosure)>>ensure:
RubParagraph>>disableDrawingWhile:
RubParagraph>>replaceFrom:to:with:
RubCurrentLineBarDecorator(RubParagraphDecorator)>>replaceFrom:to:with:

Process>>doTerminationFromAnotherProcess
Process>>terminate
PhLImageDescriptionUpdater>>terminateProcess
PhLImageDescriptionUpdater>>image:description:
PhLImageDescriptionUpdater class>>image:description:
PhLImageDetailPresenter>>updateImageDescription:
[ :text | self updateImageDescription: text ] in PhLImageDetailPresenter>>connectPresenters in Block: [ :text | self updateImageDescription: text ]
FullBlockClosure(BlockClosure)>>cull:
FullBlockClosure(BlockClosure)>>cull:cull:
[ :block | block cull: self value cull: oldValue ] in ObservableValueHolder>>valueChanged: in Block: [ :block | block cull: self value cull: oldValue ]...etc...
OrderedCollection>>do:
ObservableValueHolder>>valueChanged:
[ | oldValue |
    oldValue := value.
    value := anObject.
    self valueChanged: oldValue ] in ObservableValueHolder>>value: in Block: [ | oldValue |...
FullBlockClosure(BlockClosure)>>ensure:
ObservableValueHolder>>value:
SpTextPresenter(SpAbstractTextPresenter)>>text:
[
        self presenter text: aString.
        "Raise an announcement"
        self presenter changed: #clearUserEdits] in SpMorphicTextAdapter(SpMorphicBaseTextAdapter)>>accept:notifying: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
SpMorphicTextAdapter(SpMorphicBaseTextAdapter)>>accept:notifying:
SpMorphicTextAdapter>>accept:notifying:
SpRubScrolledTextMorph(RubScrolledTextMorph)>>acceptTextInModel
SpRubScrolledTextMorph(RubScrolledTextMorph)>>acceptContents
SpRubScrolledTextMorph(RubScrolledTextMorph)>>textChanged
RubTextScrollPane>>textChanged
RubEditingArea(RubAbstractTextArea)>>paragraphReplacedTextFrom:to:with:
[ 
            self composer emphasisHere: textArea emphasisHere.
            self composer replaceFrom: start to: stop with: aText.
            self text: self composer text.
            textArea paragraphWasComposedFrom: start to: stop.
            textArea paragraphReplacedTextFrom: start to: stop with: aText ] in RubParagraph>>replaceFrom:to:with: in Block: [ ...
FullBlockClosure(BlockClosure)>>ensure:
RubParagraph>>disableDrawingWhile:
RubParagraph>>replaceFrom:to:with:
RubCurrentLineBarDecorator(RubParagraphDecorator)>>replaceFrom:to:with:
Instance of WideString did not understand #tfPointerAddress
WideString(Object)>>doesNotUnderstand: #tfPointerAddress
LibC>>memCopy:to:size:
LibC class>>memCopy:to:size:
[ :aKey :index |
        | string pointer | 
        string := aKey trimmed , '=', (envVariables at: aKey) trimmed. 
        "The +1 is because string must be NULL terminated"
        pointer := ExternalAddress allocate: string size + 1.
        self registerPointer: pointer.
        LibC memCopy: string to: pointer size: string size.
        pointer nbUInt8AtOffset: string size put: 0. "string terminating null char"
        aPointer platformUnsignedLongAt: ((index - 1) * self systemAccessor sizeOfPointer) + 1 put: pointer value
    ] in OSSUnixSubprocess>>collectEnvVariablesPointersInto: in Block: [ :aKey :index |...
Array(SequenceableCollection)>>withIndexDo:
OSSUnixSubprocess>>collectEnvVariablesPointersInto:
OSSUnixSubprocess>>buildPrimitiveEnvArgument
[ returnValue := self primitivePosixSpawn: pidtPointer command: command fileActions: posixSpawnFileActionsT attributes: nil argPointer: self buildPrimitiveArgVArgument envPointer: self buildPrimitiveEnvArgument. ] in OSSUnixSubprocess>>internalRun in Block: [ returnValue := self primitivePosixSpawn: pidtPoi...etc...
[
        caught := true.
        self wait.
        blockValue := mutuallyExcludedBlock value
    ] in Semaphore>>critical: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
Semaphore>>critical:
[
            self systemAccessor chdir: cwdNewValue encoding: encoding.
            mutexForCwd critical: aBlock.
        ] in [ 
        | oldCwd |
        oldCwd := self systemAccessor getcwd.
        [
            self systemAccessor chdir: cwdNewValue encoding: encoding.
            mutexForCwd critical: aBlock.
        ]
        ensure: [ 
            self systemAccessor chdir: oldCwd encoding: encoding.
            completed signal.   
        ]
    ] in OSSVMProcess>>lockCwdWithValue:encoding:during: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
[ 
        | oldCwd |
        oldCwd := self systemAccessor getcwd.
        [
            self systemAccessor chdir: cwdNewValue encoding: encoding.
            mutexForCwd critical: aBlock.
        ]
        ensure: [ 
            self systemAccessor chdir: oldCwd encoding: encoding.
            completed signal.   
        ]
    ] in OSSVMProcess>>lockCwdWithValue:encoding:during: in Block: [ ...
[self value.
            "IMPORTANT: Do not step over next line of code. See method comments for details"
            Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
Instance of WideString did not understand #tfPointerAddress
WideString(Object)>>doesNotUnderstand: #tfPointerAddress
LibC>>memCopy:to:size:
LibC class>>memCopy:to:size:
[ :aKey :index |
        | string pointer | 
        string := aKey trimmed , '=', (envVariables at: aKey) trimmed. 
        "The +1 is because string must be NULL terminated"
        pointer := ExternalAddress allocate: string size + 1.
        self registerPointer: pointer.
        LibC memCopy: string to: pointer size: string size.
        pointer nbUInt8AtOffset: string size put: 0. "string terminating null char"
        aPointer platformUnsignedLongAt: ((index - 1) * self systemAccessor sizeOfPointer) + 1 put: pointer value
    ] in OSSUnixSubprocess>>collectEnvVariablesPointersInto: in Block: [ :aKey :index |...
Array(SequenceableCollection)>>withIndexDo:
OSSUnixSubprocess>>collectEnvVariablesPointersInto:
OSSUnixSubprocess>>buildPrimitiveEnvArgument
[ returnValue := self primitivePosixSpawn: pidtPointer command: command fileActions: posixSpawnFileActionsT attributes: nil argPointer: self buildPrimitiveArgVArgument envPointer: self buildPrimitiveEnvArgument. ] in OSSUnixSubprocess>>internalRun in Block: [ returnValue := self primitivePosixSpawn: pidtPoi...etc...
[
        caught := true.
        self wait.
        blockValue := mutuallyExcludedBlock value
    ] in Semaphore>>critical: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
Semaphore>>critical:
[
            self systemAccessor chdir: cwdNewValue encoding: encoding.
            mutexForCwd critical: aBlock.
        ] in [ 
        | oldCwd |
        oldCwd := self systemAccessor getcwd.
        [
            self systemAccessor chdir: cwdNewValue encoding: encoding.
            mutexForCwd critical: aBlock.
        ]
        ensure: [ 
            self systemAccessor chdir: oldCwd encoding: encoding.
            completed signal.   
        ]
    ] in OSSVMProcess>>lockCwdWithValue:encoding:during: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
[ 
        | oldCwd |
        oldCwd := self systemAccessor getcwd.
        [
            self systemAccessor chdir: cwdNewValue encoding: encoding.
            mutexForCwd critical: aBlock.
        ]
        ensure: [ 
            self systemAccessor chdir: oldCwd encoding: encoding.
            completed signal.   
        ]
    ] in OSSVMProcess>>lockCwdWithValue:encoding:during: in Block: [ ...
[self value.
            "IMPORTANT: Do not step over next line of code. See method comments for details"
            Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
demarey commented 1 year ago

Hi. Thank you for the report! I just tried to reproduce the problem on a fresh Ubuntu 22.04.2 installation but I'm not able to reproduce the problem. I can see DNU messages on WideString>>#tfPointerAddress coming from reading some values in the environment. I guess you should have non-ASCII characters in some of your environment variables (maybe the home directory ?). If you can give me more information on that, it would help to find the problem. Thanks

welblaud commented 1 year ago

@demarey Wow, strange! The problem was persistent for a couple of weeks. Now, I have just tried to reproduce that with a freshly downloaded launcher and it works as expected. I am closing the issue. Thanks for your time! (I tried it many times before, even with re-downloaded launcher.)