Normalmente, pode-se tentar --quiet, -q --help
, mas como você disse, isso não funcionará aqui. Temos que construir algo por conta própria.
Para uma instalação autônoma, acho útil deixar a instalação ser executada em um X-server virtual. Podemos enviar chaves para o servidor X e não vamos mexer com a tela atual. Portanto, precisamos de xvfb
do projeto X.org. Eu também quero tirar screenshots durante a instalação para ver onde o processo está e se algum erro ocorrer. Precisamos de imagemagick
para isso. Note que o imagemagick funcionará apenas em sessões X. Não há suporte para vias aéreas agora.
Primeiro baixe o instalador e descompacte-o.
cd ~/Downloads
wget http://cdn.rowleydownload.co.uk/arm/releases/arm_crossworks_4_1_0_linux_x64.tar.gz
tar xf arm_crossworks_4_1_0_linux_x64.tar.gz
cd ~/Downloads/arm_crossworks_4_1_linux_x64
execute este script da minha essência :
#!/bin/bash
#
# source: https://sobrelinux.info/questions/108826/install-a-program-automatically-with-terminal-which-has-menus"local" keyword is not POSIX. Leave the next line commented in
# the hope Debian Policy eventually changes to allow it in /bin/sh scripts
# anyway.
#local i
i=$SERVERNUM
while [ -f /tmp/.X$i-lock ]; do
i=$(($i + 1))
done
echo $i
}
start_xvfb() {
SERVERNUM=$(find_free_servernum)
echo starting virtual DISPLAY at :$SERVERNUM
export DISPLAY=:$SERVERNUM
Xvfb $DISPLAY -screen 0 1280x800x16 &> /dev/null &
XVFB_PID=$!
}
install_crossworks() {
check_root
if [ ! -e ./install_crossworks ]; then
echo crossworks installation file not found
exit 1
fi
timeout --kill-after=90s 90s sudo -n ./install_crossworks &
CROSSWORKS_PID=$!
crossworks_enter_keys &
KEYS_PID=$!
show_progress &
PROGRESS_PID=$!
if wait $CROSSWORKS_PID; then
echo ok
fi
kill "$PROGRESS_PID" &> /dev/null
kill "$KEYS_PID" &> /dev/null
}
crossworks_enter_keys() {
# wait for archive to get checked for crc errors
sleep 5
# press next
xdotool key KP_Enter
sleep 1
# accept license
xdotool key Tab Tab Tab space Tab Tab KP_Enter
sleep 1
# select install directory
xdotool key KP_Enter
sleep 1
# start installation
xdotool key KP_Enter
sleep 60
# exit installation
xdotool key KP_Enter
sleep 1
}
show_progress() {
while /bin/true; do
take_screenshot
echo -n .
sleep 1
done
}
take_screenshot() {
import -window root $SCREENSHOT
sudo chown $USER $SCREENSHOT
}
check_root() {
if ! sudo -n /bin/true 2>/dev/null; then
echo super user is required for installation.
sudo /bin/true
fi
}
check_installation() {
if [ -e /usr/share/crossworks_for_arm_4.1/bin/crossstudio ]; then
echo Crossworks installed.
exit 0
fi
}
cleanup() {
kill "$PROGRESS_PID" &> /dev/null
kill "$CROSSWORKS_PID" &> /dev/null
kill "$XVFB_PID" &> /dev/null
kill "$KEYS_PID" &> /dev/null
}
trap cleanup EXIT
check_installation
start_xvfb
install_crossworks
check_installation
Um grande problema foi que eu estava adivinhando o tempo que o instalador leva antes que a próxima entrada do usuário seja necessária. Isso pode variar dependendo da sua CPU.
Observe também que o script de instalação é válido apenas para instalar crossworks. O script não funcionará para atualização ou desinstalação .
Para desinstalar o crossworks novamente, execute
sudo /usr/share/crossworks_for_arm_4.1/bin/uninstall
se houver algum erro, tente dar uma olhada no status.png
que é colocado no diretório de trabalho atual. É uma captura de tela do framebuffer X.
Será algo parecido com isto na instalação:
Veja também /usr/share/crossworks_for_arm_4.1/
. Às vezes, se a instalação for abortada, este diretório estará lá, mas não será completamente preenchido com todos os dados necessários.
Você pode tentar tornar o script mais avançado, ou seja, capturando imagens de status quando um pressionamento de tecla é necessário e comparando a soma de verificação de algumas somas de verificação já salvas para ver em qual status a instalação está.