Piszę instalator graficzny dla Arch Linuxa, wykorzystuje polecenia systemowe menedżera pacman przy instalacji, niestety używając biblioteki QProcess nigdy nie udaje się zakończyć tego z powodzeniem. Wyświetla nie wiadomo skąd komunikaty o ponownej instalacji pakietów, a po ich pobraniu podczas próby zainstalowania zasypuje błędami. Korzystając z funkcji system (zamiana QStringa przy pomocy toStdString().c_str()) w przypadku QT również są problemy, natomiast w napisanym wcześniej instalatorze konsolowym działają bez problemu. Próbowałem start, ale wtedy nie wyświetla input-u pacmana i kończy całą instalację bardzo szybko, więc nie wiem nawet w czym problem, przy execute natomiast wyświetla błędy o których wspominałem. Macie może jakieś pomysły jak to rozwiązać?
void MainWindow::on_pushButton_4_clicked()
{
ui->strona_5->setVisible(false);
ui->strona_6->setVisible(true);
instalacja_1 inst1;
inst1.start_inst();
ui->progressBar->setValue(25);
if(arch==2)
{
instalacja_2_64 inst2;
dane = ui->line_user->text();
ui->progressBar->setValue(34);
inst2.start_ins_2_64(soft);
ui->progressBar->setValue(70);
inst2.user_create(dane, lxdm);
ui->progressBar->setValue(100);
}
}
class instalacja_1: public QDialog
{
Q_OBJECT
QProcess rozpocznij_1;
public:
void start_inst();
};
#endif
void instalacja_1::start_inst()
{
rozpocznij_1.start("pacstrap -i /mnt base ruby --noconfirm");
rozpocznij_1.waitForFinished(10000);
rozpocznij_1.waitForStarted();
rozpocznij_1.waitForBytesWritten();
rozpocznij_1.close();
rozpocznij_1.start("genfstab -U -p /mnt >> /mnt/etc/fstab");
rozpocznij_1.waitForFinished(10000);
rozpocznij_1.waitForStarted();
rozpocznij_1.waitForBytesWritten();
rozpocznij_1.close();
system ("cp /etc/locale.conf /mnt/etc"); //z poniższymi poleceniami raczej nie ma problemu
system ("cp /etc/locale.gen /mnt/etc");
system ("cp /etc/vconsole.conf /mnt/etc");
system ("cp /etc/skel/.bash_profile /mnt/etc/skel");
system ("cp /etc/skel/.bashrc /mnt/etc/skel");
system ("cp /etc/skel/.xinitrc /mnt/home");
system ("cp -R /etc/skel/.config /mnt/etc/skel");
system ("cp /etc/xdg/user-dirs.conf /mnt/etc/xdg");
system ("cp /etc/xdg/user-dirs.defaults /mnt/etc/xdg");
system ("mkdir /mnt/usr/share/wallpapers");
system ("cp /usr/share/wallpapers/tlobeta.png /mnt/usr/share/wallpapers");
system ("cp /etc/sudoers /mnt/home");
system ("cp /etc/lxdm.conf /mnt/home");
system ("cp -R /etc/nexia /mnt/etc");
class instalacja_2_64: public QDialog
{
Q_OBJECT
QString host, polecenia = "echo ", op, login, soft=" ", pacman = "pacman -S xorg-server xorg-xinit plasma-workspace systemsettings powerdevil plasma-nm plasma-desktop kwin ksysguard virtualbox-guest-utils kdebase-dolphin konsole compass-kde-icon-theme ntfs-3g xdg-user-dirs chromium chromium-pepper-flash xterm alsa-utils gksu p7zip base-devel ephifonts", useradd = "useradd -m -G users,audio,lp,optical,storage,video,wheel,power,network -s /bin/bash ", user, passcrypt="openssl passwd -1 ";
QProcess rozpocznij;
// QString test_pacman="pacman -S vlc";
public:
instalacja_2_64();
void start_ins_2_64(QString);
void user_create(QString, bool);
};
instalacja_2_64::instalacja_2_64()
{
system ("locale-gen");
system ("export LANG=pl_PL.UTF-8");
system ("loadkeys pl");
system ("setfont Lat2-Terminus16");
system ("ln -s /usr/share/zoneinfo/Europe/Warsaw /etc/localtime");
system ("hwclock --systohc --utc");
system ("( echo [repo64] ; echo SigLevel = Never ; echo Server = https://dl.dropboxusercontent.com/u/44000136/Repo64/) >> /etc/pacman.conf");
system ("( echo [multilib] ; echo SigLevel = PackageRequired ; echo Include = /etc/pacman.d/mirrorlist) >> /etc/pacman.conf");
rozpocznij.start("pacman -Sy"); //dotąd też nie ma problemu
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
rozpocznij.start("pacman -S grub-bios os-prober --noconfirm");
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
system ("rm /etc/default/grub");
system ("mv /etc/nexia/grub /etc/default");
rozpocznij.start("grub-install --target=i386-pc --recheck /dev/sda");
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
rozpocznij.start("grub-mkconfig -o /boot/grub/grub.cfg");
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
}
void instalacja_2_64::user_create(QString user, bool lxdm)
{
useradd += user;
rozpocznij.start(useradd);
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
if (lxdm)
{
system ("rm /etc/lxdm/lxdm.conf");
system ("mv /home/lxdm.conf /etc/lxdm");
system ("systemctl enable lxdm");
}
else
{
useradd = "( echo [Service] ; echo ExecStart= ; echo ExecStart=-/sbin/agetty --autologin ";
useradd += user;
useradd += " --noclear %I 38400 linux) >> /etc/systemd/system/[email protected]/autologin.conf";
rozpocznij.start(useradd);
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
system ("rm /home/lxdm.conf");
system ("rm /etc/nexia/lxbg.png");
}
}
void instalacja_2_64::start_ins_2_64(QString soft)
{
pacman += soft;
pacman += " --noconfirm";
rozpocznij.start(pacman);
rozpocznij.waitForStarted();
rozpocznij.waitForFinished();
rozpocznij.waitForBytesWritten();
rozpocznij.close();
system ("rm /etc/skel/.xinitrc");
system ("mv /home/.xinitrc /etc/skel");
system ("systemctl enable NetworkManager.service");
system ("systemctl disable dhcpcd.service");
system ("systemctl disable [email protected]");
system ("systemctl enable wpa_supplicant.service");
system ("rm /etc/sudoers");
system ("mv /home/sudoers /etc");
}