#include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WEBKIT_FOUND #include #endif #include "ubl-strings.h" #define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubinstall-gtk" #define _(String) gettext(String) #define glade_path "/com/ublinux/ui/ubinstall-gtk.glade" #define glade_path_ubinstall_keyboard "/com/ublinux/ui/ubinstall-gtk-keyboard.glade" #define glade_path_ubinstall_language "/com/ublinux/ui/ubinstall-gtk-language.glade" #define glade_path_log_view "/com/ublinux/ui/ubinstall-gtk-log-view.glade" #define ui_glade_path_about "/com/ublinux/ui/ubinstall-gtk-about.glade" #define ui_glade_path_documentation "/com/ublinux/ui/ubinstall-gtk-documentation.glade" #define CssPath "/com/ublinux/css/ubinstall-gtk.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define icon_path "com.ublinux.ubinstall-gtk" #define LocalePath "/usr/share/locale" #define LocaleName "ubinstall-gtk" #define clear_config_both_command "ubconfig remove TEMP_SECTION TEMP_PATAMETER" #define clear_config_global_command "ubconfig --target global remove TEMP_SECTION TEMP_PATAMETER" #define clear_config_local_command "ubconfig --target system remove TEMP_SECTION TEMP_PATAMETER" #define regions_path "/com/ublinux/images/map-time-zone.png" #define keyboard_path "/com/ublinux/images/keyboard.png" #define licence_path "/usr/share/ublinux/agreement/EULA.txt" #define languages_path "/usr/share/ubinstall-gtk/csv/locales.csv" #define zone_path "/usr/share/zoneinfo/" #define additional_software_path "resource:///com/ublinux/csv/modules.csv" #define slide_0_path "/com/ublinux/images/slide-0.png" #define slide_repeat_path "/com/ublinux/images/slide-1.png", \ "/com/ublinux/images/slide-2.png", \ "/com/ublinux/images/slide-3.png", \ "/com/ublinux/images/slide-4.png", \ "/com/ublinux/images/slide-5.png", \ "/com/ublinux/images/slide-6.png", \ "/com/ublinux/images/slide-7.png", \ "/com/ublinux/images/slide-8.png", \ "/com/ublinux/images/slide-9.png", \ "/com/ublinux/images/slide-10.png", \ "/com/ublinux/images/slide-11.png", \ "/com/ublinux/images/slide-12.png", \ NULL #define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}|^ {8,8}'|sed -e 's/ *//g' -e 's,,,g' -e 's/ *//g' -e 's,,,g'" #define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL)) #define get_layouts_command "xkbcli list --load-exotic | awk \"layout && /description:/ {match(\\$0,/: *(.*)/,matches);description=matches[1];printf \\\"%s|%s\\n\\\",layout,description;layout=\\\"\\\"} /layout:/ {match(\\$0, /: *'([^']+)'/,matches);l=matches[1];if (layouts[l]) next;layout=layouts[l]=l}\" | sort -u" #define get_layouts_local_command(layout) yon_char_unite("xkbcli list --load-exotic | awk -v layout=\"",layout,"\" \"BEGIN {layout_pattern = sprintf(\\\"^ *- *layout: *'%s'\\\",layout);matched=0} matched && /variant:/ {match(\\$0, /: *'([^']+)'/, matches);variant = matches[1]} matched && /description:/ {match(\\$0, /: *(.+)/, matches);description = matches[1]} matched && /^ *-/{matched=0; if (variant) printf \\\"%s|%s\\n\\\",variant,description} \\$0 ~ layout_pattern {matched=1;variant=\\\"\\\";description=\\\"\\\";next}\" | sort -u",NULL) #define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7,253" #define get_parts_and_devices_command "lsblk --noheadings -Jo TYPE,PATH,SIZE,FSTYPE,LABEL,PARTLABEL,MOUNTPOINT,FSUSED,FSUSE% --exclude 7,253" #define AUTOINSTALL_TYPE_INSTALL "AUTOINSTALL[install_type]" #define AUTOINSTALL_DEVICE "AUTOINSTALL[device]" #define part_parameter "AUTOINSTALL[part]" #define user_name_parameter "AUTOINSTALL[user_name]" #define user_name_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_name]" #define user_gecos_parameter "AUTOINSTALL[user_gecos]" #define user_gecos_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_gecos]" #define user_password_parameter "AUTOINSTALL[user_password]" #define user_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_password]" #define root_password_parameter "AUTOINSTALL[root_password]" #define root_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[root_password]" #define autologin_parameter "AUTOINSTALL[autologin]" #define autologin_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[autologin]" #define xkbmodel_parameter "AUTOINSTALL[xkbmodel]" #define xkbmodel_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbmodel]" #define xkblayout_parameter "AUTOINSTALL[xkblayout]" #define xkblayout_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkblayout]" #define xkbvariant_parameter "AUTOINSTALL[xkbvariant]" #define xkbvariant_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbvariant]" #define xkboptions_parameter "AUTOINSTALL[xkboptions]" #define xkboptions_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkboptions]" #define hostname_parameter "AUTOINSTALL[hostname]" #define hostname_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]" #define zone_parameter "AUTOINSTALL[zone]" #define zone_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[zone]" #define lang_parameter "AUTOINSTALL[lang]" #define lang_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[lang]" #define locale_parameter "AUTOINSTALL[locale]" #define locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[locale]" #define device_format_parameter "AUTOINSTALL[device_format]" #define device_format_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device_format]" #define device_label_parameter "AUTOINSTALL[device_label]" #define device_label_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_label]" #define part_size_parameter "AUTOINSTALL[part_size]" #define part_size_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_size]" #define part_type_parameter "AUTOINSTALL[part_fs_type]" #define part_type_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_fs_type]" #define save_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] AUTOINSTALL[log]=yes ",parameters, "; nice ubinstall2 --debug autoinstall'", NULL) #define set_user_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] ",parameters,";nice ubinstall2 autoconfig'",NULL) #define open_gparted_command "gparted" #define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get [autoinstall] AUTOINSTALL[install_type]" #define AUTOINSTALL_DEVICE_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]" #define part_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part]" #define PASSWORD_DEFAULT "ublinux" #define start_fast_install_command "ubinstall2 --autoinstall" #define progress_path "/var/log/ubinstall_progress.log" #define password_limits_path "/etc/security/pwquiality.conf" #define short_log_path "/var/log/ubinstall_progress.log" #define full_log_path "/var/log/ubinstall.log" #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]",NULL) #define config_get_local_command "ubconfig --source system get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]" #define config_get_global_command yon_char_new("ubconfig --source global get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]") #define config_get_default_command "ubconfig --source default get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]" #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" #define ubconfig_file_create(target) yon_char_unite("ubconfig --target \"",target,"\" create",NULL) typedef char* string; string version_application; char *local; enum YON_PAGES { YON_PAGE_WELCOME = 0, YON_PAGE_LICENCE, YON_PAGE_SECTIONS, YON_PAGE_OS_COMPONENTS, YON_PAGE_SOFTWARE, YON_PAGE_INSTALLATION_BEGIN, YON_PAGE_INSTALLATION, YON_PAGE_REGION, YON_PAGE_KEYBOARD, YON_PAGE_USERS, YON_PAGE_COMPLETION, YON_PAGE_COMPLETED, YON_PAGE_INSTALL_COMMON, YON_PAGE_INSTALL_SEPARATE, YON_PAGE_INSTALL_SAME_PARTITION, YON_PAGE_INSTALL_OPTIONS, YON_PAGE_OPTIONS_GRUB_INSTALL, YON_PAGE_OPTIONS_GRUB_UPDATE, YON_PAGE_OPTIONS_SEPARATE, YON_PAGE_OPTIONS_SEPARATE_USRDATA, YON_PAGE_OPTIONS_OS_ONLY, YON_PAGE_OPTIONS_USRDATA_ONLY, YON_PAGE_INSTALL_ERROR, YON_PAGE_CONFIGURE_END }; typedef struct { int socket_id; int load_socket_id; int save_socket_id; int lock_help; int lock_save_local; int lock_save_global; int lock_load_global; int always_open_documentation; int password_min_length; int save_done; int load_mode; int install_complete; int debug_mode; guint slider_thread; int install_mode; GThread *config_save_thread; GThread *install_thread; guint progress_thread; int configure_mode; int log_progress_buzy; int autologin_default; int format_default; } config; typedef struct { GtkBuilder *builder; GtkListStore *DevicesList; GtkListStore *LanguagesList; GtkTreeStore *LayoutList; GtkListStore *AdditionalSoftwareList; GtkListStore *PartitionsList; GtkWidget *LoadGlobalConfigurationMenuItem; GtkWidget *LoadLocalConfigurationMenuItem; GtkWidget *LoadExternalConfigurationMenuItem; GtkWidget *SaveGlobalLocalConfigurationMenuItem; GtkWidget *SaveGlobalConfigurationMenuItem; GtkWidget *SaveLocalConfigurationMenuItem; GtkWidget *SaveExternalConfigurationMenuItem; GtkWidget *SaveButton; GtkWidget *MainWindow; GtkWidget *StatusBox; GtkWidget *WelcomeToggle; GtkWidget *LicenceToggle; GtkWidget *LocationToggle; GtkWidget *KeyboardToggle; GtkWidget *SectionsToggle; GtkWidget *UsersToggle; GtkWidget *SummaryToggle; GtkWidget *CompletionToggle; GtkWidget *InstallationToggle; GtkWidget *LanguageCombo; GtkWidget *RegionCombo; GtkWidget *ZoneCombo; GtkWidget *AvailableLanguagesEntry; GtkWidget *AvailableLanguagesButton; GtkWidget *LanguagesCombo; GtkWidget *KeyboardModelCombo; GtkWidget *LayoutBindingCombo; GtkWidget *DefaultLayoutRadio; GtkWidget *ManualLayoutRadio; GtkWidget *LayoutTree; GtkWidget *AddButton; GtkWidget *RemoveButton; GtkWidget *InstallationRadio; GtkWidget *InstallationNearRadio; GtkWidget *InstallationLinuxRadio; GtkWidget *InstallationWindowsRadio; GtkWidget *InstallationOptionsRadio; GtkWidget *UserNameEntry; GtkWidget *LoginEntry; GtkWidget *PasswordCombo; GtkWidget *PasswordEntry; GtkWidget *PasswordButton; GtkWidget *AutologinCheck; GtkWidget *AdminPasswordCombo; GtkWidget *AdminPasswordEntry; GtkWidget *AdminPasswordButton; GtkWidget *HotnameEntry; GtkWidget *AutoHostnameCheck; GtkWidget *CancelInstallButton; GtkWidget *BackButton; GtkWidget *NextButton; GtkWidget *mainSettingsButton; GtkWidget *menu1; GtkWidget *menu2; GtkWidget *RegionImage; GtkWidget *RegionBox; GtkWidget *RegionAspect; GtkWidget *KeyboardImage; GtkWidget *KeyboardBox; GtkWidget *Notebook; GtkWidget *LicenceLabel; GtkWidget *SlidesImage; GtkWidget *SameInstallationFilesystemTypeCombo; GtkWidget *SameInstallationFormatCheck; GtkWidget *SameInstallationSectionNameEntry; GtkWidget *NextInstallationFilesystemTypeCombo; GtkWidget *NextInstallationFormatCheck; GtkWidget *NextInstallationSectionNameEntry; GtkWidget *CommonInstallationFilesystemTypeCombo; GtkWidget *CommonInstallationSectionNameEntry; GtkWidget *InstallationNearSysDevicesTree; GtkWidget *InstallationNearSysSectionTree; GtkWidget *InstallationNearSizeSpin; GtkWidget *InstallationNearSizeTypeSpin; GtkWidget *SamePlaceDeviceTree; GtkWidget *SamePlacePartTree; GtkWidget *InstallationProgress; GtkWidget *InstallationLabel; GtkWidget *ReadShortLogButton; GtkWidget *PackageInstallationProgress; GtkWidget *PackageInstallationLabel; GtkWidget *ReadFullLogButton; GtkWidget *GpartedCommonButton; GtkWidget *GpartedNearButton; GtkWidget *GpartedSameButton; GtkWidget *ConfigurationModeMenuItem; GtkWidget *AboutMenuItem; GtkWidget *DocumentationMenuItem; GtkCellRenderer *AdditionalSoftwareCell; GtkWidget *CommonInstallationDevicesTree; GtkWidget *AdditionalSoftwareTree; GtkWidget *GrubInstallRadio; GtkWidget *GrubUpdateRadio; GtkWidget *SeparateRadio; GtkWidget *OSRadio; GtkWidget *UserDataOnlyRadio; GtkWidget *GpartedGrubInstallButton; GtkWidget *GrubInstallDevicesTree; GtkWidget *GpartedGrubUpdateButton; GtkWidget *GrubUpdateDevicesTree; GtkWidget *GpartedSeparateButton; GtkWidget *SeparateDevicesTree; GtkWidget *SeparateSysSectionTree; GtkWidget *GpartedSeparateUserButton; GtkWidget *SeparateUserDevicesTree; GtkWidget *SeparateUserSysSectionTree; GtkWidget *GpartedOSButton; GtkWidget *OSDevicesTree; GtkWidget *OSSysSectionTree; GtkWidget *GpartedUserdataButton; GtkWidget *UserdataDevicesTree; GtkWidget *UserdataSysSectionTree; GtkTreeModel *LanguagesFilter; GtkTreeModel *LayoutsFilter; GdkPixbuf *regions_original; GdkPixbuf *keyboard_original; GdkPixbuf *slides_original; float region_height_mult; GtkWidget *RegionSensitiveCheck; GtkWidget *LanguagesSensitiveCheck; GtkWidget *MainLanguageSensitiveCheck; GtkWidget *KeyboardModelSensitiveCheck; GtkWidget *OptionsSensitiveCheck; GtkWidget *LayoutSensitiveCheck; GtkWidget *UsernameSensitiveCheck; GtkWidget *LoginSensitiveCheck; GtkWidget *PasswordSensitiveCheck; GtkWidget *AutologinSensitiveCheck; GtkWidget *RootPasswordSensitiveCheck; GtkWidget *HostnameSensitiveCheck; GtkWidget *CommonFilesystemSensitiveCheck; GtkWidget *CommonSectionSensitiveCheck; GtkWidget *NextSizeSensitiveCheck; GtkWidget *NextFSTypeSensitiveCheck; GtkWidget *NextLabelSensitiveCheck; GtkWidget *SameFSTypeSensitiveCheck; GtkWidget *SameLabelSensitiveCheck; } main_window; typedef struct { GtkWidget *Window; GtkWidget *HeaderLabel; GtkWidget *AlwaysOpenCheck; GtkWidget *CloseButton; GtkWidget *AcceptButton; } documentation_confirmation_window; typedef struct{ GtkWidget *MainWindow; GtkWidget *StatusBox; GtkWidget *headerBar; GtkWidget *CancelButton; GtkWidget *SaveButton; GtkWidget *LayoutsTree; GtkCellRenderer *ActiveToggle; } ubinstall_keyboard_window; typedef struct{ GtkListStore *liststore1; GtkWidget *MainWindow; GtkWidget *StatusBox; GtkWidget *DefaultCheck; GtkWidget *headerBar; GtkWidget *CancelButton; GtkWidget *SaveButton; GtkWidget *LanguagesTree; GtkCellRenderer *ToggleRenderer; } ubinstall_language_window; typedef struct{ GtkWidget *CreateGroupWindow; GtkWidget *StatusBox; GtkWidget *UserCancelButton; GtkWidget *UserOkButton; GtkWidget *PasswordEntry; GtkWidget *RepeatPasswordEntry; GtkWidget *PasswordHashEntry; GtkWidget *HashBox; GtkWidget *PasswordBox; GtkWidget *NoEncriptionCheck; } password_window; typedef struct { GtkWidget *Window; GtkWidget *ScrollWindow; GtkWidget *StatusBox; GtkWidget *HeadLabel; GtkWidget *LogLabel; char *command; } log_window; void config_init(); main_window *yon_main_window_complete(); ubinstall_language_window *yon_ubinstall_language_new(); void NewFunction(ubinstall_language_window *window, GtkBuilder *builder); ubinstall_keyboard_window *yon_ubinstall_keyboard_new(); password_window *yon_password_new(); void on_password_accept(GtkWidget *self, dictionary *dict); char* yon_debug_output(char *pattern,char*text); char *yon_save_command_prepare(char *command, char *target); void yon_interface_update(main_window *widgets); void on_summary_log_view(GtkWidget *); void on_near_installation_device_changed(GtkWidget *self, main_window *widgets); void on_toggle_button_switch_on(GtkWidget *, GtkToggleButton *toggle); void on_autohostname_sensitiveness_check(GtkWidget *, main_window *widgets); void on_autohostname_check(GtkWidget *, main_window *widgets); void on_hostname_entry_changed (GtkWidget *, main_window *widgets);