diff --git a/gxde-kernel-manager.pro b/gxde-kernel-manager.pro
index abe91aa..9c3c3ed 100644
--- a/gxde-kernel-manager.pro
+++ b/gxde-kernel-manager.pro
@@ -10,17 +10,21 @@ CONFIG += c++17
 
 SOURCES += \
     kernelinformation.cpp \
+    kernelinstaller.cpp \
     main.cpp \
     mainwindow.cpp
 
 HEADERS += \
     kernelinformation.h \
+    kernelinstaller.h \
     mainwindow.h
 
 FORMS += \
+    kernelinstaller.ui \
     mainwindow.ui
 
 # Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin
 else: unix:!android: target.path = /opt/$${TARGET}/bin
 !isEmpty(target.path): INSTALLS += target
+unix:!macx: LIBS += -lqtermwidget5
diff --git a/kernelinstaller.cpp b/kernelinstaller.cpp
new file mode 100644
index 0000000..3f309f8
--- /dev/null
+++ b/kernelinstaller.cpp
@@ -0,0 +1,38 @@
+#include "kernelinstaller.h"
+#include "ui_kernelinstaller.h"
+
+#include <ctime>
+#include <cstdlib>
+#include <QFile>
+
+#define MAX_TMP_NUM 1024
+#define MIN_TMP_NUM 1024
+
+KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::KernelInstaller)
+{
+    ui->setupUi(this);
+    this->kernelList = kernelList;
+    terminal = new QTermWidget(0);
+    terminal->setColorScheme("DarkPastels");
+    ui->verticalLayout->addWidget(terminal);
+    StartInstaller();
+}
+
+void KernelInstaller::StartInstaller()
+{
+    // 随机生成目录
+    srand(time(0));
+    int randomNumber = (rand() % (MAX_TMP_NUM - MIN_TMP_NUM)) + 1;  // 左闭右闭
+    QString tempPath = tempDir + "/gxde-kernel-manager-installer-" + QString::number(randomNumber) + ".sh";
+    QFile file(tempPath);
+    file.open(QFile::WriteOnly);
+    //file.write("#/bin/bash")
+    file.close();
+}
+
+KernelInstaller::~KernelInstaller()
+{
+    delete ui;
+}
diff --git a/kernelinstaller.h b/kernelinstaller.h
new file mode 100644
index 0000000..2b00cae
--- /dev/null
+++ b/kernelinstaller.h
@@ -0,0 +1,30 @@
+#ifndef KERNELINSTALLER_H
+#define KERNELINSTALLER_H
+
+#include <QMainWindow>
+
+#include <qtermwidget5/qtermwidget.h>
+
+namespace Ui {
+class KernelInstaller;
+}
+
+class KernelInstaller : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit KernelInstaller(QStringList kernelList, QWidget *parent = nullptr);
+    ~KernelInstaller();
+
+private:
+    Ui::KernelInstaller *ui;
+    QTermWidget *terminal;
+    QStringList kernelList;
+
+    QString tempDir = "/tmp";
+
+    void StartInstaller();
+};
+
+#endif // KERNELINSTALLER_H
diff --git a/kernelinstaller.ui b/kernelinstaller.ui
new file mode 100644
index 0000000..023fae9
--- /dev/null
+++ b/kernelinstaller.ui
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>KernelInstaller</class>
+ <widget class="QMainWindow" name="KernelInstaller">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <widget class="QLabel" name="m_statue">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="text">
+       <string>TextLabel</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QProgressBar" name="m_installProcess">
+      <property name="value">
+       <number>0</number>
+      </property>
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="textDirection">
+       <enum>QProgressBar::TopToBottom</enum>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/mainwindow.cpp b/mainwindow.cpp
index f4bda58..54545d0 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -10,19 +10,18 @@ MainWindow::MainWindow(QWidget *parent)
     , ui(new Ui::MainWindow)
 {
     ui->setupUi(this);
+    kernelInformation = new KernelInformation();
     RefreshKernelList();
 }
 
 void MainWindow::RefreshKernelList()
 {
-    KernelInformation *information = new KernelInformation();
-    ui->m_nowKernel->setText(tr("Kernel: ") + information->localKernelName());
-    connect(information, &KernelInformation::loadFinished, this, [this, information](){
-        qDebug() << information->get_listData();
-        RefreshKernelListView(information);
-        delete information;
+    ui->m_nowKernel->setText(tr("Kernel: ") + kernelInformation->localKernelName());
+    connect(kernelInformation, &KernelInformation::loadFinished, this, [this](){
+        qDebug() << this->kernelInformation->get_listData();
+        RefreshKernelListView(kernelInformation);
     });
-    information->LoadInfo();
+    kernelInformation->LoadInfo();
 }
 
 void MainWindow::RefreshKernelListView(KernelInformation *info)
@@ -30,10 +29,11 @@ void MainWindow::RefreshKernelListView(KernelInformation *info)
     // 更新列表
     int count = info->get_count();
     QStandardItemModel *model = new QStandardItemModel();
-    model->setHorizontalHeaderLabels(QStringList() << tr("Kernel Name") << tr("Author"));
+    model->setHorizontalHeaderLabels(QStringList() << tr("ID") << tr("Kernel Name") << tr("Author"));
     for(int i = 0; i < count; i++) {
-        model->setItem(i, 0, new QStandardItem(info->get_name(i)));
-        model->setItem(i, 1, new QStandardItem(info->get_author(i)));
+        model->setItem(i, 0, new QStandardItem(QString::number(i)));
+        model->setItem(i, 1, new QStandardItem(info->get_name(i)));
+        model->setItem(i, 2, new QStandardItem(info->get_author(i)));
     }
     ui->m_kernelShow->setModel(model);
 }
@@ -43,3 +43,16 @@ MainWindow::~MainWindow()
     delete ui;
 }
 
+
+void MainWindow::on_m_refreshButton_clicked()
+{
+    RefreshKernelList();
+}
+
+
+void MainWindow::on_m_installButton_clicked()
+{
+    KernelInstaller *installer = new KernelInstaller(kernelInformation->get_pkgName(0));
+    installer->show();
+}
+
diff --git a/mainwindow.h b/mainwindow.h
index ff651d4..251faaf 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -3,6 +3,7 @@
 
 #include <QMainWindow>
 #include "kernelinformation.h"
+#include "kernelinstaller.h"
 
 QT_BEGIN_NAMESPACE
 namespace Ui { class MainWindow; }
@@ -16,8 +17,14 @@ public:
     MainWindow(QWidget *parent = nullptr);
     ~MainWindow();
 
+private slots:
+    void on_m_refreshButton_clicked();
+
+    void on_m_installButton_clicked();
+
 private:
     Ui::MainWindow *ui;
+    KernelInformation *kernelInformation;
     void RefreshKernelList();
     void RefreshKernelListView(KernelInformation *info);
 };
diff --git a/mainwindow.ui b/mainwindow.ui
index 5931443..3f8c32c 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -16,7 +16,20 @@
   <widget class="QWidget" name="centralwidget">
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
-     <widget class="QTableView" name="m_kernelShow"/>
+     <widget class="QTableView" name="m_kernelShow">
+      <property name="editTriggers">
+       <set>QAbstractItemView::NoEditTriggers</set>
+      </property>
+      <property name="selectionBehavior">
+       <enum>QAbstractItemView::SelectRows</enum>
+      </property>
+      <property name="wordWrap">
+       <bool>true</bool>
+      </property>
+      <attribute name="verticalHeaderVisible">
+       <bool>false</bool>
+      </attribute>
+     </widget>
     </item>
     <item>
      <layout class="QHBoxLayout" name="horizontalLayout">
@@ -41,9 +54,16 @@
        </spacer>
       </item>
       <item>
-       <widget class="QPushButton" name="pushButton">
+       <widget class="QPushButton" name="m_refreshButton">
         <property name="text">
-         <string>PushButton</string>
+         <string>Refresh</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="m_installButton">
+        <property name="text">
+         <string>Install</string>
         </property>
        </widget>
       </item>