Silent install Qt run installer on ubuntu server

前端 未结 12 1012
有刺的猬
有刺的猬 2020-11-30 23:47

I wanted to know if there is a way to do a silent install of the Qt run installer on Ubuntu Server?
I mean by-pass the options of the installer and do a default install?

相关标签:
12条回答
  • 2020-12-01 00:04

    The Qt toolkit is packaged using the Qt Installer Framework (QtIFW). QtIFW installers support a --script option that allows you to programatically control the installation via the Controller Scripting API. Here's qt-installer-noninteractive.qs file to install Qt 5 non-interactively:

    // Emacs mode hint: -*- mode: JavaScript -*-
    
    function Controller() {
        installer.autoRejectMessageBoxes();
        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()
    {
        gui.currentPageWidget().TargetDirectoryLineEdit.setText(installer.value("HomeDir") + "/Qt");
        gui.clickButton(buttons.NextButton);
    }
    
    Controller.prototype.ComponentSelectionPageCallback = function() {
        var widget = gui.currentPageWidget();
    
        widget.deselectAll();
        widget.selectComponent("qt.55.gcc_64");
        widget.selectComponent("qt.55.qtquickcontrols");
    
        // widget.deselectComponent("qt.tools.qtcreator");
        // widget.deselectComponent("qt.55.qt3d");
        // widget.deselectComponent("qt.55.qtcanvas3d");
        // widget.deselectComponent("qt.55.qtlocation");
        // widget.deselectComponent("qt.55.qtquick1");
        // widget.deselectComponent("qt.55.qtscript");
        // widget.deselectComponent("qt.55.qtwebengine");
        // widget.deselectComponent("qt.extras");
        // widget.deselectComponent("qt.tools.doc");
        // widget.deselectComponent("qt.tools.examples");
    
        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);
    }
    

    This script demonstrates how to select/deselect certain components. Customize for your needs or just remove the lines entirely for a default installation. Likewise, you may want to customize or remove the TargetDirectoryLineEdit line. Run the Qt installer like:

    qt-opensource-linux-x64-5.5.1.run --script qt-installer-noninteractive.qs
    

    Add -platform minimal for a headless installation. Future installers based on newer versions of QtIFW should be able to use a --silent option instead (see QTIFW-166).

    Add --verbose for more verbose console output (helpful for gleaning component names, wizard page names, etc). This link is also helpful for figuring out component names.

    0 讨论(0)
  • 2020-12-01 00:05

    There have few minor different in answering the questions of wizard for a different kind of version of Qt. To make it more simple, I have packed a generic script to extract Qt from an offline/online installer.

    The script: qtci/extract-qt-installer at master · benlau/qtci

    Example Usage:

    extract-qt-installer qt-opensource-linux-x64-android-5.5.1.run ~/Qt
    

    Environment Variables"

    VERBOSE [Optional] Set to "true" will enable VERBOSE output
    QT_CI_PAGEAGES [Optional] Select the components to be installed instead of using default (eg. QT_CI_PAGEAGES="qt.59.gcc_64")
    

    Moreover, it has few scripts to download and install Qt with different versions.

    qtci/recipes at master · benlau/qtci

    0 讨论(0)
  • 2020-12-01 00:05

    It's necessary to write in credentials in order to pass through credentials menu. In order to avoid that it's necessary to run docker build command with following network argument:

    docker build --network none -t <img_name> <Dockerfile_path>
    

    It was something that was missing in order to succesfully run qt interactive installation in docker.

    0 讨论(0)
  • 2020-12-01 00:08

    Take a look at this awesome project: aqtinstall https://github.com/miurahr/aqtinstall/

    It can install Qt on Linux, Mac and Windows machines without any interaction.

    There's also a Github action that uses this tool: https://github.com/jurplel/install-qt-action

    0 讨论(0)
  • 2020-12-01 00:15

    This works for me!

     export DISPLAY=:1
     Xvfb :1 -screen 0 1024x768x16 &
     fluxbox &
     x11vnc -display :1 &
    

    Connect to server using any vnc client

    0 讨论(0)
  • 2020-12-01 00:16

    As of installer 3.0.2-online 29-11-2017, you must add a delay in your JS script because the "Next" button in the "Welcome" page is disabled for one second or so.

    Controller.prototype.WelcomePageCallback = function() {
        gui.clickButton(buttons.NextButton, 3000);
    }
    

    For once, they explain on the 3.2.1-online 29-01-2020 release page how to skip the new form

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

    Some may wonder how to create the mysterious qtaccount.ini file (required since 3.2.1-2-online). Qt only tells us that it should be placed in ~/.local/share/Qt/. I was unable to find any other information. The installer creates this file itself when you enter your credentials for the first time. So simply do a manual installation and quit after the accound form. The generated file looks like

    [General]
    email=my.email@domain.ca
    pass=mypass
    
    [QtAccount]
    email=my.email@domain.ca
    jwt=a long hash
    u=a small hash
    
    0 讨论(0)
提交回复
热议问题