Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt silent installation on Linux server



  • Hi,

    I have Linux server(Ubuntu 20.04) and i am triying to install Qt using command line but i didn't get succeed yet
    I have tried using below reference
    https://stackoverflow.com/questions/25105269/silent-install-qt-run-installer-on-ubuntu-server
    and the command i am using here is

    ./qt-opensource-linux-x64-5.14.2.run --script qt-installer-noninteractive.qs --platform minimal --verbose
    

    but the installation stucks in between, the log is as follows

    IFW Version: 3.2.2, built with Qt 5.12.7.
    Build date: Mar 11 2020
    Installer Framework SHA1: 42d8165
    [0] Language: No UI language set
    [0] Arguments: ./qt-opensource-linux-x64-5.14.2.run, --script, qt-installer-noninteractive.qs, --verbose
    [1] Operations sanity check succeeded.
    [2] License type read from resource file: "open source"
    [2] License display name read from resource file: "open source"
    [2] Product read from resource file: ""
    [2] Reading Qt Account settings from disk: "/home/dev/.local/share/Qt/qtaccount.ini"
    [2] Warning: Qt Account settings file [/home/dev/.local/share/Qt/qtaccount.ini] does not exist.
    [2] QtAccount information:
    [2] Login completed: false
    [2] Email: ""
    [2] Total number of licenses: 0
    [2] Account type: 3
    [2] Resource tree:
    [3]      :/translations
    [3]      :/translations/ifw_zh_CN.qm
    [3]      :/translations/qt_da.qm
    [3]      :/translations/qt_de.qm
    [3]      :/translations/qt_en.qm
    [3]      :/translations/qt_es.qm
    [3]      :/translations/qt_fr.qm
    [3]      :/translations/qt_ja.qm
    [3]      :/translations/qt_it.qm
    [3]      :/translations/qt_pl.qm
    [3]      :/translations/qt_ru.qm
    [3]      :/translations/ifw_de.qm
    [3]      :/translations/ifw_da.qm
    [3]      :/translations/ifw_es.qm
    [3]      :/translations/ifw_en.qm
    [3]      :/translations/ifw_fr.qm
    [3]      :/translations/ifw_it.qm
    [3]      :/translations/ifw_ja.qm
    [3]      :/translations/ifw_pl.qm
    [3]      :/translations/ifw_ru.qm
    [3]      :/translations/qt_zh_CN.qm
    [3]      :/files-to-patch-macx-emb-arm-qt5
    [3]      :/files-to-patch-windows
    [3]      :/files-to-patch-linux-emb-arm-qt5-no-bin-patch
    [3]      :/files-to-patch-linux-emb-arm-qt5
    [3]      :/files-to-patch-windows-emb-arm-qt5-no-bin-patch
    [3]      :/files-to-patch-windows-emb-arm
    [3]      :/files-to-patch-linux-qt5
    [3]      :/files-to-patch-windows-qt5
    [3]      :/files-to-patch-linux-emb-arm
    [3]      :/files-to-patch-windows-emb-arm-qt5
    [3]      :/files-to-patch-windows-qt5-no-bin-patch
    [3]      :/files-to-patch-macx
    [3]      :/files-to-patch-linux-qt5-no-bin-patch
    [3]      :/files-to-patch-macx-qt5
    [3]      :/files-to-patch-macx-emb-arm-qt5-no-bin-patch
    [3]      :/files-to-patch-macx-qt5-no-bin-patch
    [3]      :/files-to-patch-linux
    [3]      :/uninstall.png
    [3]      :/installer.png
    [3]      :/installer.ico
    [3]      :/keepinstalled.png
    [3]      :/installer.icns
    [3]      :/install.png
    [3]      :/keepuninstalled.png
    [5]      :/qgradient
    [5]      :/qgradient/webgradients.binaryjson
    [5]      :/metadata
    [5]      :/metadata/qt
    [5]      :/metadata/qt/installscript.qs
    [5]      :/metadata/qt.qt5.5142.qtquicktimeline.android
    [5]      :/metadata/qt.qt5.5142.qtquicktimeline.android/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtquicktimeline.gcc_64
    [6]      :/metadata/qt.qt5.5142.qtquicktimeline.gcc_64/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtpurchasing.gcc_64
    [6]      :/metadata/qt.qt5.5142.qtpurchasing.gcc_64/installscript.qs
    [6]      :/metadata/qt.tools.qtcreator
    [6]      :/metadata/qt.tools.qtcreator/launchqtcreatorcheckboxform.ui
    [6]      :/metadata/qt.tools.qtcreator/associatecommonfiletypesform.ui
    [6]      :/metadata/qt.tools.qtcreator/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtnetworkauth
    [6]      :/metadata/qt.qt5.5142.qtnetworkauth/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtwebglplugin.gcc_64
    [6]      :/metadata/qt.qt5.5142.qtwebglplugin.gcc_64/installscript.qs
    [6]      :/metadata/qt.license.gplv3except
    [6]      :/metadata/qt.license.gplv3except/LICENSE.GPL3-EXCEPT
    [6]      :/metadata/qt.qt5.5142.gcc_64
    [6]      :/metadata/qt.qt5.5142.gcc_64/installscript.qs
    [6]      :/metadata/qt.license.lgpl
    [6]      :/metadata/qt.license.lgpl/LICENSE
    [6]      :/metadata/qt.qt5.5142.qtquicktimeline
    [6]      :/metadata/qt.qt5.5142.qtquicktimeline/installscript.qs
    [6]      :/metadata/rccprojectyfhCHx.qrc
    [6]      :/metadata/qt.qt5.5142.qtquick3d
    [6]      :/metadata/qt.qt5.5142.qtquick3d/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtscript
    [6]      :/metadata/qt.qt5.5142.qtscript/installscript.qs
    [6]      :/metadata/qt.qt5.5142.android
    [6]      :/metadata/qt.qt5.5142.android/installscript.qs
    [6]      :/metadata/config
    [6]      :/metadata/config/config-internal.ini
    [6]      :/metadata/installer-config
    [6]      :/metadata/installer-config/watermark_linux_png.png
    [6]      :/metadata/installer-config/config.xml
    [6]      :/metadata/installer-config/logo-small.png
    [6]      :/metadata/qt.qt5.5142.qtlottie
    [6]      :/metadata/qt.qt5.5142.qtlottie/installscript.qs
    [6]      :/metadata/qt.tools
    [6]      :/metadata/qt.tools/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtvirtualkeyboard
    [6]      :/metadata/qt.qt5.5142.qtvirtualkeyboard/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtcharts
    [6]      :/metadata/qt.qt5.5142.qtcharts/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtdatavis3d.android
    [6]      :/metadata/qt.qt5.5142.qtdatavis3d.android/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtlottie.android
    [6]      :/metadata/qt.qt5.5142.qtlottie.android/installscript.qs
    [6]      :/metadata/qt.qt5.5142
    [6]      :/metadata/qt.qt5.5142/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtwebglplugin
    [6]      :/metadata/qt.qt5.5142.qtwebglplugin/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtcharts.android
    [6]      :/metadata/qt.qt5.5142.qtcharts.android/installscript.qs
    [6]      :/metadata/qt.qt5.5142.qtvirtualkeyboard.gcc_64
    [6]      :/metadata/qt.qt5.5142.qtvirtualkeyboard.gcc_64/installscript.qs
    [6]      :/metadata/qt.license.win10sdk
    [6]      :/metadata/qt.license.win10sdk/sdk_license
    [6]      :/metadata/qt.qt5.5142.qtscript.gcc_64
    [6]      :/metadata/qt.qt5.5142.qtscript.gcc_64/installscript.qs
    [6]      :/metadata/Updates.xml
    [7]      :/metadata/qt.qt5.5142.qtwaylandcompositor.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtwaylandcompositor.gcc_64/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtwebengine.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtwebengine.gcc_64/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtcharts.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtcharts.gcc_64/installscript.qs
    [7]      :/metadata/qt.license.python
    [7]      :/metadata/qt.license.python/LICENSE.PYTHON
    [7]      :/metadata/qt.qt5.5142.qtdatavis3d.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtdatavis3d.gcc_64/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtnetworkauth.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtnetworkauth.gcc_64/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtwebengine
    [7]      :/metadata/qt.qt5.5142.qtwebengine/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtquick3d.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtquick3d.gcc_64/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtwaylandcompositor
    [7]      :/metadata/qt.qt5.5142.qtwaylandcompositor/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtpurchasing
    [7]      :/metadata/qt.qt5.5142.qtpurchasing/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtdatavis3d
    [7]      :/metadata/qt.qt5.5142.qtdatavis3d/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtpurchasing.android
    [7]      :/metadata/qt.qt5.5142.qtpurchasing.android/installscript.qs
    [7]      :/metadata/qt.qt5.5142.src
    [7]      :/metadata/qt.qt5.5142.src/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtnetworkauth.android
    [7]      :/metadata/qt.qt5.5142.qtnetworkauth.android/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtscript.android
    [7]      :/metadata/qt.qt5.5142.qtscript.android/installscript.qs
    [7]      :/metadata/qt.qt5.5142.qtlottie.gcc_64
    [7]      :/metadata/qt.qt5.5142.qtlottie.gcc_64/installscript.qs
    [40] Loaded control script "qt-installer-noninteractive.qs"
    [40] Using control script: "qt-installer-noninteractive.qs"
    

    kindly suggest for the correct way if i am wrong

    thanks in advance


  • Lifetime Qt Champion

    @Kallappa said in Qt silent installation on Linux server:

    /home/dev/.local/share/Qt/qtaccount.ini

    Did you make this file with login info ?

    Since it says
    Warning: Qt Account settings file [/home/dev/.local/share/Qt/qtaccount.ini] does not exist.

    It might be the issue.



  • @mrjj, Thanks for your reply

    it is necessory for open source installation?


  • Lifetime Qt Champion

    @Kallappa
    Yes, login is mandatory now. Even for open source.



  • @mrjj ,

    after adding this qtaccount.ini file ~/.local/share/Qt
    account login is done but may be problem with .qs script it stops after login

    [5] :/metadata/qt.qt5.5142.src
    [5] :/metadata/qt.qt5.5142.src/installscript.qs
    [5] :/metadata/qt.qt5.5142.qtnetworkauth.android
    [5] :/metadata/qt.qt5.5142.qtnetworkauth.android/installscript.qs
    [5] :/metadata/qt.qt5.5142.qtscript.android
    [5] :/metadata/qt.qt5.5142.qtscript.android/installscript.qs
    [5] :/metadata/qt.qt5.5142.qtlottie.gcc_64
    [5] :/metadata/qt.qt5.5142.qtlottie.gcc_64/installscript.qs
    [20] Loaded control script "qt-installer-noninteractive.qs"
    [20] Using control script: "qt-installer-noninteractive.qs"
    [3130] Login completed to Qt Account: "kallappa.bachagundi@verolt.com"
    [3130] Saving Qt Account settings to file: "/home/dev/.local/share/Qt/qtaccount.ini"
    [3210] "Installation preconditions ok, installation can proceed!" [ "success" ]
    [3218] Control script callback "ObligationsPageCallback" does not exist.


  • Lifetime Qt Champion

    Hi
    Not sure exactly what is wrong but it seems it tried to call
    ObligationsPageCallback
    and its not found so scripts exists.



  • @mrjj , You can find the script here

    function Controller() {
        installer.autoRejectMessageBoxes();
        installer.setMessageBoxAutomaticAnswer("installationError", QMessageBox.Retry);
        installer.setMessageBoxAutomaticAnswer("installationErrorWithRetry", QMessageBox.Retry);
        installer.setMessageBoxAutomaticAnswer("DownloadError", QMessageBox.Retry);
        installer.setMessageBoxAutomaticAnswer("archiveDownloadError", QMessageBox.Retry);
        installer.installationFinished.connect(function() {
            gui.clickButton(buttons.NextButton);
        })
    }
    
    Controller.prototype.WelcomePageCallback = function() {
    //click delay here because the next button is initially disabled for ~1 second
        gui.clickButton(buttons.NextButton, 3000);
    }
    
    Controller.prototype.CredentialsPageCallback = function() {
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.IntroductionPageCallback = function() {
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.TargetDirectoryPageCallback = function()
    {
        //dev is the user in our docker image
        gui.currentPageWidget().TargetDirectoryLineEdit.setText(installer.value("HomeDir") + "/Qt");
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.PerformInstallationPageCallback = function() {
        gui.clickButton(buttons.CommitButton);
    }
    
    Controller.prototype.ComponentSelectionPageCallback = function() {
        function list_packages() {
          var components = installer.components();
          console.log("Available components: " + components.length);
          var packages = ["Packages: "];
          for (var i = 0 ; i < components.length ;i++) {
              packages.push(components[i].name);
          }
          console.log(packages.join(" "));
        }
    
        list_packages();
    
        var widget = gui.currentPageWidget();
    
        console.log(widget);
    
        widget.deselectAll();
        widget.selectComponent("qt.qt5.5130");
        widget.selectComponent("qt.qt5.5130.gcc_64");
        // widget.deselectComponent("");
    
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.LicenseAgreementPageCallback = function() {
        gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.StartMenuDirectoryPageCallback = function() {
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.ReadyForInstallationPageCallback = function()
    {
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.FinishedPageCallback = function() {
        var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm;
        if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
            checkBoxForm.launchQtCreatorCheckBox.checked = false;
        }
        gui.clickButton(buttons.FinishButton);
    }
            
    

  • Lifetime Qt Champion

    @Kallappa
    Hi
    It seems it's missing a section for the new screen with openSource info

    I can't recall if it has a next button or an ok button
    you could try to add

    Controller.prototype.ObligationsPageCallback= function()
    {
    gui.clickButton(buttons.NextButton);
    }

    and see.



  • @mrjj,

    i have added ObligationsPageCallback function as below

    Controller.prototype.ObligationsPageCallback = function() {
        var page = gui.pageWidgetByObjectName("ObligationsPage");
        page.obligationsAgreement.setChecked(true);
        page.completeChanged();
        gui.clickButton(buttons.NextButton);
    }
    

    and it completes the installation
    but but i don't have qmake to compile qt applications

    if am wrong sorry for above information, i am new to this


  • Lifetime Qt Champion

    @Kallappa
    Hi
    Well it worked so it seems fine. Good work.

    What you mean make is missing?
    But it did install a Qt version for you to use ?



  • @mrjj
    hi,
    I mean i need qt environement to build qt application on Linux server
    so i need qmake and make to compile qt source code.

    but i didn't found this on ~/Qt directory
    i have only below folders/files

    InstallationLog.txt  
    MaintenanceTool.dat 
     components.xml 
     installerResources
    Licenses             
    MaintenanceTool.ini  
    dist            
    network.xml
    MaintenanceTool      
    Tools              
    installer.dat
    

  • Lifetime Qt Champion

    @Kallappa
    It seems that
    widget.selectComponent("qt.qt5.5130");
    widget.selectComponent("qt.qt5.5130.gcc_64");

    didnt really select anything?

    if you look at the link a user posted

    Controller.prototype.ComponentSelectionPageCallback = function() {
        var page = gui.pageWidgetByObjectName("ComponentSelectionPage");
    
        var archiveCheckBox = gui.findChild(page, "Archive");
        var latestCheckBox = gui.findChild(page, "Latest releases");
        var fetchButton = gui.findChild(page, "FetchCategoryButton");
    
        archiveCheckBox.click();
        latestCheckBox.click();
        fetchButton.click();
    
        // ...
    }
    

    Do you have that in script ?
    As now the versions are grouped so i think the script is not totally updated with the new installers.



  • @mrjj ,

    No the part above mentioned is not there in script for this it is as below

    Controller.prototype.ComponentSelectionPageCallback = function() {
        function list_packages() {
          var components = installer.components();
          console.log("Available components: " + components.length);
          var packages = ["Packages: "];
          for (var i = 0 ; i < components.length ;i++) {
              packages.push(components[i].name);
          }
          console.log(packages.join(" "));
        }
    
        list_packages();
    
        var widget = gui.currentPageWidget();
    
        console.log(widget);
    
        widget.deselectAll();
        widget.selectComponent("qt.qt5.5130");
        widget.selectComponent("qt.qt5.5130.gcc_64");
        // widget.deselectComponent("");
    
        gui.clickButton(buttons.NextButton);
    }
    


  • @mrjj,
    Hi,

    if i add the part

    var page = gui.pageWidgetByObjectName("ComponentSelectionPage");
    
        var archiveCheckBox = gui.findChild(page, "Archive");
        var latestCheckBox = gui.findChild(page, "Latest releases");
        var fetchButton = gui.findChild(page, "FetchCategoryButton");
    
        archiveCheckBox.click();
        latestCheckBox.click();
        fetchButton.click();
    
        // ...
    

    it give error for click() as function doesn't exist


  • Lifetime Qt Champion

    @Kallappa
    Hmm thats odd. it should work.

    Do you need a special Qt or jus the newest ?

    maybe you can just change the script to do that and ignore the Archive thing.



  • @mrjj
    Hi,
    yes, i just need Qt5.14.0 or Qt5.14.2 installation on server,
    thats it.

    if any other ways kindly suggest here or the Qt's reference doc if any for command line installation in ubuntu


  • Lifetime Qt Champion

    @Kallappa
    sadly there is no commandline install version.

    We need to change these lines
    widget.selectComponent("qt.qt5.5130");
    widget.selectComponent("qt.qt5.5130.gcc_64");
    but I not sure what names should be for
    Qt5.14.0
    or if they will be in Archive.

    Do you use the newest online installer from Qt site ?

    It seems to have Qt5.14.0 in front
    alt text


  • Lifetime Qt Champion

    hi
    You can try
    widget.selectComponent("qt.qt5.14.2");
    widget.selectComponent("qt.qt5.14.2.gcc_64");
    and see if that works.

    I hope "Latest releases" is checked by default when running with this script else it wont work as nothing in list then.



  • @mrjj,

    yes sure, Thanks, for your time
    just now i tried with widget.selectAll(); instead of selecting each one
    it works for me on Local system and now i will try on server.

    thanks again


  • Lifetime Qt Champion

    @Kallappa
    Ok, i cross fingers.
    You might get a shitload of other stuff but hopefully, that won't matter :)



  • Do yourself a favor and DO NOT USE the offical Qt installers anymore. Use aqt install: https://github.com/miurahr/aqtinstall - Works perfectly on every platform.



  • Thanks @mrjj it worked for me on server also. :)


  • Lifetime Qt Champion

    @Kallappa
    Good to hear :)
    So did it install tons of stuff or just a few ?
    I wonder what one will get with selectAll :)



  • @mrjj

    hmm, Your right it is installed with all files related qt5.14.2


  • Lifetime Qt Champion

    @Kallappa
    Ok i kinda though it might. but was not sure.
    Thank you for reporting back.


Log in to reply