GObject学习教程---第八章:GObject 对接口的模拟

本文介绍如何使用GObject库模拟接口的实现方式。通过定义接口、接口实现类和测试代码,展示了如何让一个类实现特定接口并使用接口方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引:https://blog.youkuaiyun.com/knowledgebao/article/details/84633798

本文是学习学习他人的博客的心得(具体详见“楼主见解”),如果源网站可访问的话,建议直接访问源网站:

楼主见解:

主要讲解接口是如何实现的。

整理一下常用宏:

继承常用宏:其中P表示项目名称,T表示类名称,PTPrivate表示私有数据结构体。

#define P_TYPE_T (p_t_get_type ())
#define P_T(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), P_TYPE_T, PT))
#define P_IS_T(obj) G_TYPE_CHECK_INSTANCE_TYPE ((obj), P_TYPE_T))
#define P_T_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), P_TYPE_T, PTClass))
#define P_IS_T_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), P_TYPE_T))
#define P_T_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), P_TYPE_T, PTClass))
#define P_T_GET_PRIVATE(obj) (\
        G_TYPE_INSTANCE_GET_PRIVATE ((obj), P_TYPE_T, PTPrivate))
  • P_TYPE_T:仅在使用 g_object_new 进行对象实例化的时候使用一次,用于向 GObject 库的类型系统注册 PT 类;
  • P_T (obj):用于将 obj 对象的类型强制转换为 P_T 类的实例结构体类型;
  • P_IS_T (obj):用于判断 obj 对象的类型是否为 P_T 类的实例结构体类型;
  • P_T_CLASS(klass):用于将 klass 类结构体的类型强制转换为 P_T 类的类结构体类型;
  • P_IS_T_CLASS(klass):用于判断 klass 类结构体的类型是否为 P_T 类的类结构体类型;
  • P_T_GET_CLASS(obj):获取 obj 对象对应的类结构体类型。
  • P_T_GET_PRIVATE(obj):获取obj对象对应的私有数据。

接口常用宏:其中P表示项目名称,T表示类名称,I是接口的缩写

#define P_TYPE_IT (p_t_get_type ())
#define P_IT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), P_TYPE_IT, PIt))
#define P_IS_IT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), P_TYPE_IT))
#define P_IT_GET_INTERFACE(obj) \
        (G_TYPE_INSTANCE_GET_INTERFACE ((obj), P_TYPE_IT, PItInterface))
  • P_TYPE_IT:仅在接口实现时使用一次,用于向 GObject 库的类型系统注册 PIT 接口;
  • P_IT (obj):用于将 obj 对象的类型强制转换为 P_IT 接口的实例结构体类型;
  • P_IS_IT (obj):用于判断 obj 对象的类型是否为 P_IT 接口的实例结构体类型;
  • P_IT_GET_INTERFACE(obj):获取 obj 对象对应的 P_IT 接口的类结构体类型。

接口的定义:

第一:.h实现

#ifndef MY_IUSB_H
#define MY_IUSB_H
  
#include <glib-object.h>
  
/*
写之前需要确定的三个名称如下(其中I表示接口):
类名称:MyIUse;对应的接口类(结构类)MyIUserInterface(MyIUserClass)
类型:MY_TYPE_IUSE(一般定义取类名的大写,中间加TYPE组合)
函数前缀:my_iuse(一般定义取类名的小写,中间加下划线组合)
*/
#define MY_TYPE_IUSB (my_iusb_get_type ())
#define MY_IUSB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),MY_TYPE_IUSB, MyIUsb))
#define MY_IS_IUSB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_IUSB))
#define MY_IUSB_GET_INTERFACE(obj) (\
                G_TYPE_INSTANCE_GET_INTERFACE ((obj), MY_TYPE_IUSB, MyIUsbInterface))
  
//类结构无需具体是实现
typedef struct _MyIUsb MyIUsb;

typedef struct _MyIUsbInterface MyIUsbInterface;
struct _MyIUsbInterface {
    GTypeInterface parent_interface;

    //接口  
    gchar * (*read) (MyIUsb *self);
    void (*write) (MyIUsb *self, const gchar *str);
};
 
 
GType my_iusb_get_type (void);
//接口定义
gchar * my_iusb_read (MyIUsb *self);
void my_iusb_write (MyIUsb *self, const gchar *str);
  
#endif

第二:.c实现

#include "my-iusb.h"
 
G_DEFINE_INTERFACE (MyIUsb, my_iusb, G_TYPE_INVALID);
 
static void
my_iusb_default_init (MyIUsbInterface *iface)
{
}
 
gchar *
my_iusb_read (MyIUsb *self)
{
        g_return_if_fail (MY_IS_IUSB (self));
 
        MY_IUSB_GET_INTERFACE (self)->read (self);
}
 
void
my_iusb_write (MyIUsb *self, const gchar *str)
{
        g_return_if_fail (MY_IS_IUSB (self));
 
        MY_IUSB_GET_INTERFACE (self)->write (self, str);
}

接口的实现类:

同样继承自GObject,基本和GObject继承一致,唯一的区别就是在.c文件中用G_DEFINE_TYPE_WITH_CODE代替G_DEFINE_TYPE,其中前者比后者参数多一个,这个就是接口实现。多一个接口初始化函数,此函数my_iusb_interface_init,此函数中,将接口的函数指针,指向实际执行的函数。这样就可以通过接口调用之类的接口了。

第一:.h实现

#ifndef MY_UDISK_H
#define MY_UDISK_H
 
#include "my-iusb.h"
 
#define MY_TYPE_UDISK (my_udisk_get_type ())
#define MY_UDISK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_UDISK, MyUdisk))
#define MY_IS_UDISK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_UDISK))
#define MY_UDISK_CLASS(klass) \
        (G_TYPE_CHECK_CLASS_CAST ((klass), MY_TYPE_UDISK, MyUdiskClass))
#define MY_IS_UDISK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MY_TYPE_UDISK))
#define MY_UDISK_GET_CLASS(obj) \
        (G_TYPE_INSTANCE_GET_CLASS ((obj),MY_TYPE_UDISK,MyUdiskClass))
 
typedef struct _MyUdisk MyUdisk;
typedef struct _MyUdiskClass MyUdiskClass;
 
struct _MyUdisk {
        GObject parent;
        GString *data;
};
struct _MyUdiskClass {
        GObjectClass parent_class;
};
 
GType my_udisk_get_type (void);
 
#endif

第二:.c实现

#include "my-udisk.h"
 
static void my_iusb_interface_init (MyIUsbInterface *iface);
 
G_DEFINE_TYPE_WITH_CODE (MyUdisk, my_udisk, G_TYPE_OBJECT,
                         G_IMPLEMENT_INTERFACE (MY_TYPE_IUSB, my_iusb_interface_init));
 
static gchar *
my_udisk_read (MyIUsb *iusb)
{
        MyUdisk *udisk = MY_UDISK (iusb);
        return udisk->data->str;
}
 
static void
my_udisk_write (MyIUsb *iusb, const gchar *str)
{
        MyUdisk *udisk = MY_UDISK (iusb);
        g_string_assign (udisk->data, str);
}
 
static void
my_udisk_init (MyUdisk *self)
{
        self->data = g_string_new (NULL);
}
 
static void
my_udisk_class_init (MyUdiskClass *self)
{
}
 
static void
my_iusb_interface_init (MyIUsbInterface *iface)
{
        iface->read = my_udisk_read;
        iface->write = my_udisk_write;
}

第三:测试代码

#include "my-udisk.h"
 
int
main (void)
{
        g_type_init ();
 
        MyUdisk *udisk = g_object_new (MY_TYPE_UDISK, NULL);
 
        my_iusb_write (MY_IUSB (udisk), "I am u-disk!");
        gchar *data = my_iusb_read (MY_IUSB (udisk));
 
        g_printf ("%s\n\n", data);
 
        g_printf ("Is udisk a MyIUsb object?\n");
        if (MY_IS_IUSB (udisk))
                g_printf ("Yes!\n");
        else
                g_printf ("No!\n");
 
        g_printf ("\nIs udisk a MyUdisk object?\n");
        if (MY_IS_UDISK (udisk))
                g_printf ("Yes!\n");
        else
                g_printf ("No!\n");
 
        return 0;
}

源博客网址:http://garfileo.is-programmer.com/categories/6934/posts

 

GObject 对接口的模拟

在文档 [1] 中谈到接口古已有之,但是类的继承赋予了它一些新的概念。本文结合实例,学习如何使用 GObject 库所提供的接口类型来表达这些概念。

接口声明

下面的代码(文件名 my-iusb.h)声明了一个叫做 MyIUsb 的接口,My 是项目名,I 是 interface 的首字母的大写,Usb 表示接口的名称。MyIUsb 就表示在“My”项目里,Usb 是一个 Interface。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#ifndef MY_IUSB_H

#define MY_IUSB_H

  

#include <glib-object.h>

  

#define MY_TYPE_IUSB (my_iusb_get_type ())

#define MY_IUSB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),MY_TYPE_IUSB, MyIUsb))

 

typedef struct _MyIUsb MyIUsb;

typedef struct _MyIUsbInterface MyIUsbInterface;

  

struct _MyIUsbInterface {

    GTypeInterface parent_interface;

  

    gchar * (*read) (MyIUsb *self);

    void (*write) (MyIUsb *self, const gchar *str);

};

 

 

GType my_iusb_get_type (void);

 

gchar * my_iusb_read (MyIUsb *self);

void my_iusb_write (MyIUsb *self, const gchar *str);

  

#endif

上述代码与文档[5]中 KbBibtex 类的声明代码很相似,但也有所区别。

首先,MyIUsb 接口的实例结构体,它只是个名字,并没有具体实现。这是因为,在 Java 那样的语言里谈到“接口”,那么则意味着它是无法实例化的。这其中是有一定的道理的,因为接口只是协议嘛。

其次,MyIUsbInterface 是 MyIUsb 接口的类结构体,它继承自 GTypeInterface 类结构体。也就是说,当你要声明接口时,那么接口的类结构体便要继承 GTypeInterface 类结构体,而当你声明的是可实例化为对象的类时,其类结构体便要继承 GObjectClass。

再次,在 MyIUsbInterface 结构体中,可包含一组函数指针,它们便是接口的协议。

最后,声明接口。对于本例而言,接口便是 my_iusb_read 与 my_iusb_write。

上述代码的解读过程大致是:

  1. 这是一个 usb 接口。
  2. 这个接口即可以 read,也可以 write,但是 read 只能是返回字符串,而 write 只能是接受字符串
  3. 声明这个接口的具体形式,在现实中则以理解为声明 usb 接口有几根线构成,每根线的功能等等。

接口的定义

建立 my-iusb.c 源文件,内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#include "my-iusb.h"

 

G_DEFINE_INTERFACE (MyIUsb, my_iusb, G_TYPE_INVALID);

 

static void

my_iusb_default_init (MyIUsbInterface *iface)

{

}

 

gchar *

my_iusb_read (MyIUsb *self)

{

        g_return_if_fail (MY_IS_IUSB (self));

 

        MY_IUSB_GET_INTERFACE (self)->read (self);

}

 

void

my_iusb_write (MyIUsb *self, const gchar *str)

{

        g_return_if_fail (MY_IS_IUSB (self));

 

        MY_IUSB_GET_INTERFACE (self)->write (self, str);

}

其中,my_iusb_default_init 是 G_DEFINE_INTERFACE 宏的展开代码中声明的一个函数,其中可以放置接口的一些初始化代码。如果没有这方面的需求,就让它表现为一个空函数即可,否则编译器会警告你,说你有一个函数声明了但没有实现。

另外,上述代码中出现了三个陌生的宏,其功能如下:

  • G_DEFINE_INTERFACE 宏的功用与 G_DEFINE_TYPE 类似,后者在 GObject 子类化的时候经常使用;
  • MY_IS_IUSB 宏是用来检测对象是否为 MyIUsb 类型,最好要在 my-iusb.h 中进行定义,代码为:

1

#define MY_IS_IUSB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_IUSB))

  • 在 GObject 子类化的时候,也可以定义类似的宏,用于识别某个对象对应哪种类型。比如之前我们用过的一个 G_IS_OBJECT 宏,它可以识别对象是否为 GObject 类型的对象。
  • MY_IUSB_GET_INTERFACE 宏,用于从 MyIUsb 接口的实例结构体中取出类结构体指针,然后利用该指针访问接口对应的方法。至于 MyIUsb 接口的实例结构体是怎样与类结构体指针取得关联的,那是 GObject 的内幕,暂且不必关心。MY_IUSB_GET_INTERFACE 宏也需要在 my-iusb.h 中进行定义,如下:

1

2

#define MY_IUSB_GET_INTERFACE(obj) (\

                G_TYPE_INSTANCE_GET_INTERFACE ((obj), MY_TYPE_IUSB, MyIUsbInterface))

现在,将 my-iusb.h 文件更新为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#ifndef MY_IUSB_H

#define MY_IUSB_H

  

#include <glib-object.h>

  

#define MY_TYPE_IUSB (my_iusb_get_type ())

#define MY_IUSB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),MY_TYPE_IUSB, MyIUsb))

#define MY_IS_IUSB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_IUSB))

#define MY_IUSB_GET_INTERFACE(obj) (\

                G_TYPE_INSTANCE_GET_INTERFACE ((obj), MY_TYPE_IUSB, MyIUsbInterface))

  

typedef struct _MyIUsb MyIUsb;

typedef struct _MyIUsbInterface MyIUsbInterface;

  

struct _MyIUsbInterface {

    GTypeInterface parent_interface;

  

    gchar * (*read) (MyIUsb *self);

    void (*write) (MyIUsb *self, const gchar *str);

};

 

 

GType my_iusb_get_type (void);

 

gchar * my_iusb_read (MyIUsb *self);

void my_iusb_write (MyIUsb *self, const gchar *str);

  

#endif

插曲:经常要用到并且需要自己定义的宏

文档 [2-5] 中自定义了多个宏,在此略微进行总结一下,免的后续文档再多费口舌。

对于 GObject 的子类化,那么在声明类的时候,在头文件中直接插入类似下面的一组宏定义:

1

2

3

4

5

6

#define P_TYPE_T (p_t_get_type ())

#define P_T(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), P_TYPE_T, PT))

#define P_IS_T(obj) G_TYPE_CHECK_INSTANCE_TYPE ((obj), P_TYPE_T))

#define P_T_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), P_TYPE_T, PTClass))

#define P_IS_T_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), P_TYPE_T))

#define P_T_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), P_TYPE_T, PTClass))

这些宏的用法总结如下:

  • P_TYPE_T:仅在使用 g_object_new 进行对象实例化的时候使用一次,用于向 GObject 库的类型系统注册 PT 类;
  • P_T (obj):用于将 obj 对象的类型强制转换为 P_T 类的实例结构体类型;
  • P_IS_T (obj):用于判断 obj 对象的类型是否为 P_T 类的实例结构体类型;
  • P_T_CLASS(klass):用于将 klass 类结构体的类型强制转换为 P_T 类的类结构体类型;
  • P_IS_T_CLASS(klass):用于判断 klass 类结构体的类型是否为 P_T 类的类结构体类型;
  • P_T_GET_CLASS(obj):获取 obj 对象对应的类结构体类型。

对于 GTypeInterface 的子类化,在声明类的时候,在头文件中直接插入类似下面的一组宏定义:

1

2

3

4

5

#define P_TYPE_IT (p_t_get_type ())

#define P_IT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), P_TYPE_IT, PIt))

#define P_IS_IT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), P_TYPE_IT))

#define P_IT_GET_INTERFACE(obj) \

        (G_TYPE_INSTANCE_GET_INTERFACE ((obj), P_TYPE_IT, PItInterface))

  • P_TYPE_IT:仅在接口实现时使用一次,用于向 GObject 库的类型系统注册 PIT 接口;
  • P_IT (obj):用于将 obj 对象的类型强制转换为 P_IT 接口的实例结构体类型;
  • P_IS_IT (obj):用于判断 obj 对象的类型是否为 P_IT 接口的实例结构体类型;
  • P_IT_GET_INTERFACE(obj):获取 obj 对象对应的 P_IT 接口的类结构体类型。

接口的实现——制造 U 盘

既然已经有了 USB 接口的声明(协议),那就意味着我们可以制造具备这种接口的类与对象了。

首先声明 U 盘类(my-udisk.h):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#ifndef MY_UDISK_H

#define MY_UDISK_H

 

#include "my-iusb.h"

 

#define MY_TYPE_UDISK (my_udisk_get_type ())

#define MY_UDISK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_UDISK, MyUdisk))

#define MY_IS_UDISK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_UDISK))

#define MY_UDISK_CLASS(klass) \

        (G_TYPE_CHECK_CLASS_CAST ((klass), MY_TYPE_UDISK, MyUdiskClass))

#define MY_IS_UDISK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MY_TYPE_UDISK))

#define MY_UDISK_GET_CLASS(obj) \

        (G_TYPE_INSTANCE_GET_CLASS ((obj),MY_TYPE_UDISK,MyUdiskClass))

 

typedef struct _MyUdisk MyUdisk;

typedef struct _MyUdiskClass MyUdiskClass;

 

struct _MyUdisk {

        GObject parent;

        GString *data;

};

struct _MyUdiskClass {

        GObjectClass parent_class;

};

 

GType my_udisk_get_type (void);

 

#endif

上述代码声明了一个 MyUdisk 类,它是 GObject 的子类。MyUdisk 类的实例结构体中有一个 GString 类型的 data 属性,用于存储数据。也就是说,这个 U 盘设计的有些脑残,因为它只能存储一个字符串!

然后定义 U 盘类(my-udisk.c):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#include "my-udisk.h"

 

static void my_iusb_interface_init (MyIUsbInterface *iface);

 

G_DEFINE_TYPE_WITH_CODE (MyUdisk, my_udisk, G_TYPE_OBJECT,

                         G_IMPLEMENT_INTERFACE (MY_TYPE_IUSB, my_iusb_interface_init));

 

static gchar *

my_udisk_read (MyIUsb *iusb)

{

        MyUdisk *udisk = MY_UDISK (iusb);

        return udisk->data->str;

}

 

static void

my_udisk_write (MyIUsb *iusb, const gchar *str)

{

        MyUdisk *udisk = MY_UDISK (iusb);

        g_string_assign (udisk->data, str);

}

 

static void

my_udisk_init (MyUdisk *self)

{

        self->data = g_string_new (NULL);

}

 

static void

my_udisk_class_init (MyUdiskClass *self)

{

}

 

static void

my_iusb_interface_init (MyIUsbInterface *iface)

{

        iface->read = my_udisk_read;

        iface->write = my_udisk_write;

}

上述代码中,有几处需要留意的地方:

  • my_iusb_interface_init 函数声明必须要放在 G_DEFINE_TYPE_WITH_CODE 宏之前,因为这个宏的展开代码中需要使用这个函数;
  • G_DEFINE_TYPE_WITH_CODE 是文档 [2-5] 中出现过的 G_DEFINE_TYPE 宏的“扩展版本”,在本例中可以向 my_udisk_get_type 函数(即 MY_TYPE_UDISK 宏展开的那个函数)中插入 C 代码。在本例中,这个宏所插入的 C 代码是“G_IMPLEMENT_INTERFACE(MY_TYPE_IUSB,my_iusb_interface_init)”,其中 G_IMPLEMENT_INTERFACE 宏的作用是将接口添加到  MyUdisk 类中;
  • my_iusb_interface_init 函数的作用是表明 MyUdisk 类实现了 MyIUsb 所规定的接口。

至此,MyIUsb 接口的一个实现便完成了。下面的 main.c 文件中的代码用于测试这个 U 盘是否可以使用 MyIUsb 接口进行访问,即:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#include "my-udisk.h"

 

int

main (void)

{

        g_type_init ();

 

        MyUdisk *udisk = g_object_new (MY_TYPE_UDISK, NULL);

 

        my_iusb_write (MY_IUSB (udisk), "I am u-disk!");

        gchar *data = my_iusb_read (MY_IUSB (udisk));

 

        g_printf ("%s\n\n", data);

 

        g_printf ("Is udisk a MyIUsb object?\n");

        if (MY_IS_IUSB (udisk))

                g_printf ("Yes!\n");

        else

                g_printf ("No!\n");

 

        g_printf ("\nIs udisk a MyUdisk object?\n");

        if (MY_IS_UDISK (udisk))

                g_printf ("Yes!\n");

        else

                g_printf ("No!\n");

 

        return 0;

}

这个程序的编译命令及执行结果如下:

1

2

3

4

5

6

7

8

9

$ gcc $(pkg-config --cflags --libs gobject-2.0) my-iusb.c my-udisk.c main.c -o test

$ ./test

I am u-disk!

 

Is udisk a MyIUsb object?

Yes!

 

Is udisk a MyUdisk object?

Yes!

一切都在掌握之中啊。

还可以接着造移动硬盘

可以像制造 U 盘那样,便可以炮制移动硬盘了。这项艰巨的任务便交给你了,而懒惰的我只提供下面这个计算机主机程序:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include "my-udisk.h"

 

int

main (void)

{

        g_type_init ();

 

        gchar *data = NULL;

 

        MyUdisk *udisk = g_object_new (MY_TYPE_UDISK, NULL);

        my_iusb_write (MY_IUSB (udisk), "I am an u-disk!");

        data = my_iusb_read (MY_IUSB (udisk));

        g_printf ("%s\n", data);

 

        MyPortableHardDisk *phdisk = g_object_new (MY_TYPE_PORTABLE_HARD_DISK, NULL);

        my_iusb_write (MY_IUSB (phdisk), "I am a portable hard disk!");

        data = my_iusb_read (MY_IUSB (phdisk));

        g_printf ("%s\n", data);

 

        return 0;

}

~ End ~

参考文档

[1继承与接口

[2使用 GObject 库模拟类的数据封装形式

[3GObject 子类私有属性模拟

[4GObject 子类私有属性的外部访问

[5温故而知新

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com

如何将下面在线的Ubuntu22.04主机的包迁移到另一台内网Ubuntu22.04主机中:1 upgraded, 186 newly installed, 0 to remove and 282 not upgraded. Need to get 102 MB/103 MB of archives. After this operation, 407 MB of additional disk space will be used. Get:1 file:/cdrom jammy/main amd64 libnl-route-3-200 amd64 3.5.0-0.1 [180 kB] Ign:1 file:/cdrom jammy/main amd64 libnl-route-3-200 amd64 3.5.0-0.1 Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 acl amd64 2.3.1-1 [38.5 kB] Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 hicolor-icon-theme all 0.17-2 [9,976 B] Get:4 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf2.0-common all 2.42.8+dfsg-1ubuntu0.3 [5,630 B] Get:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libjpeg-turbo8 amd64 2.1.2-0ubuntu1 [134 kB] Get:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libjpeg8 amd64 8c-2ubuntu10 [2,264 B] Get:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdeflate0 amd64 1.10-2 [70.9 kB] Get:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libjbig0 amd64 2.1-3.1ubuntu0.22.04.1 [29.2 kB] Get:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libwebp7 amd64 1.2.2-2ubuntu0.22.04.2 [206 kB] Get:10 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libtiff5 amd64 4.3.0-6ubuntu0.10 [185 kB] Get:11 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf-2.0-0 amd64 2.42.8+dfsg-1ubuntu0.3 [148 kB] Get:12 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 gtk-update-icon-cache amd64 3.24.33-1ubuntu2.2 [31.4 kB] Get:13 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 humanity-icon-theme all 0.6.16 [1,282 kB] Get:14 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 ubuntu-mono all 20.10-0ubuntu2 [153 kB] Get:15 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 adwaita-icon-theme all 41.0-1ubuntu1 [3,444 kB] Get:16 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 alsa-topology-conf all 1.2.5.1-2 [15.5 kB] Get:17 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libasound2-data all 1.2.6.1-1ubuntu1 [19.1 kB] Get:18 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libasound2 amd64 1.2.6.1-1ubuntu1 [390 kB] Get:19 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 alsa-ucm-conf all 1.2.6.3-1ubuntu1.12 [43.5 kB] Get:20 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxi6 amd64 2:1.8-1build1 [32.6 kB] Get:21 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libatspi2.0-0 amd64 2.44.0-3 [80.9 kB] Get:22 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 x11-common all 1:7.7+23ubuntu2 [23.4 kB] Get:23 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxtst6 amd64 2:1.2.3-1build4 [13.4 kB] Get:24 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdconf1 amd64 0.40.0-3 [40.5 kB] Get:25 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 dconf-service amd64 0.40.0-3 [28.5 kB] Get:26 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 dconf-gsettings-backend amd64 0.40.0-3 [22.8 kB] Get:27 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 session-migration amd64 0.3.6 [9,774 B] Get:28 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 gsettings-desktop-schemas all 42.0-1ubuntu1 [31.1 kB] Get:29 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 at-spi2-core amd64 2.44.0-3 [54.4 kB] Get:30 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 msr-tools amd64 1.3-4 [10.3 kB] Get:31 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 cpu-checker amd64 0.7-1.3build1 [6,800 B] Get:32 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 fonts-dejavu-core all 2.37-2build1 [1,041 kB] Get:33 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 fontconfig-config all 2.13.1-4.2ubuntu5 [29.1 kB] Get:34 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libfontconfig1 amd64 2.13.1-4.2ubuntu5 [131 kB] Get:35 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 fontconfig amd64 2.13.1-4.2ubuntu5 [177 kB] Get:36 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libproxy1v5 amd64 0.4.17-2 [51.9 kB] Get:37 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 glib-networking-common all 2.72.0-1 [3,718 B] Get:38 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 glib-networking-services amd64 2.72.0-1 [9,982 B] Get:39 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 glib-networking amd64 2.72.0-1 [69.8 kB] Get:40 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libcdparanoia0 amd64 3.10.2+debian-14build2 [49.3 kB] Get:41 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 liborc-0.4-0 amd64 1:0.4.32-2ubuntu0.1 [228 kB] Get:42 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgstreamer-plugins-base1.0-0 amd64 1.20.1-1ubuntu0.4 [848 kB] Get:43 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libogg0 amd64 1.3.5-0ubuntu3 [22.9 kB] Get:44 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libopus0 amd64 1.3.1-0.1build2 [203 kB] Get:45 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libpixman-1-0 amd64 0.40.0-1ubuntu0.22.04.1 [264 kB] Get:46 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-render0 amd64 1.14-3ubuntu3 [16.4 kB] Get:47 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-shm0 amd64 1.14-3ubuntu3 [5,780 B] Get:48 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxrender1 amd64 1:0.9.10-1build4 [19.7 kB] Get:49 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libcairo2 amd64 1.16.0-5ubuntu2 [628 kB] Get:50 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libtheora0 amd64 1.1.1+dfsg.1-15ubuntu4 [209 kB] Get:51 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libvisual-0.4-0 amd64 0.4.0-17build2 [108 kB] Get:52 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libvorbis0a amd64 1.3.7-1build2 [99.2 kB] Get:53 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libvorbisenc2 amd64 1.3.7-1build2 [82.6 kB] Get:54 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 gstreamer1.0-plugins-base amd64 1.20.1-1ubuntu0.4 [712 kB] Get:55 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libaa1 amd64 1.4p5-50build1 [51.9 kB] Get:56 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libraw1394-11 amd64 2.1.2-2build2 [27.0 kB] Get:57 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libavc1394-0 amd64 0.5.4-5build2 [17.0 kB] Get:58 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libcaca0 amd64 0.99.beta19-2.2ubuntu4 [224 kB] Get:59 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libcairo-gobject2 amd64 1.16.0-5ubuntu2 [19.4 kB] Get:60 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdv4 amd64 1.0.0-14build1 [61.9 kB] Get:61 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libflac8 amd64 1.3.3-2ubuntu0.2 [111 kB] Get:62 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgstreamer-plugins-good1.0-0 amd64 1.20.3-0ubuntu1.3 [30.1 kB] Get:63 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libiec61883-0 amd64 1.2.0-4build3 [25.9 kB] Get:64 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libsamplerate0 amd64 0.2.2-1build1 [1,359 kB] Get:65 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libjack-jackd2-0 amd64 1.9.20~dfsg-1 [293 kB] Get:66 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libmp3lame0 amd64 3.100-3build2 [141 kB] Get:67 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libmpg123-0 amd64 1.29.3-1ubuntu0.1 [172 kB] Get:68 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libasyncns0 amd64 0.8-6build2 [12.8 kB] Get:69 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libsndfile1 amd64 1.0.31-2ubuntu0.2 [196 kB] Get:70 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libx11-xcb1 amd64 2:1.7.5-1ubuntu0.3 [7,802 B] Get:71 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpulse0 amd64 1:15.99.1+dfsg1-1ubuntu2.2 [298 kB] Get:72 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libspeex1 amd64 1.2~rc1.2-1.1ubuntu3 [57.9 kB] Get:73 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libshout3 amd64 2.4.5-1build3 [54.5 kB] Get:74 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libtag1v5-vanilla amd64 1.11.1+dfsg.1-3ubuntu3 [304 kB] Get:75 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libtag1v5 amd64 1.11.1+dfsg.1-3ubuntu3 [11.5 kB] Get:76 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libtwolame0 amd64 0.4.0-2build2 [52.5 kB] Get:77 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libv4lconvert0 amd64 1.22.1-2build1 [82.4 kB] Get:78 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libv4l-0 amd64 1.22.1-2build1 [44.9 kB] Get:79 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libvpx7 amd64 1.11.0-2ubuntu2.4 [1,078 kB] Get:80 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libwavpack1 amd64 5.4.0-1build2 [83.7 kB] Get:81 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxdamage1 amd64 1:1.1.5-2build2 [7,154 B] Get:82 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxfixes3 amd64 1:6.0.0-1 [11.7 kB] Get:83 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libsoup2.4-common all 2.74.2-3ubuntu0.5 [4,660 B] Get:84 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libsoup2.4-1 amd64 2.74.2-3ubuntu0.5 [287 kB] Get:85 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 gstreamer1.0-plugins-good amd64 1.20.3-0ubuntu1.3 [2,010 kB] Get:86 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libgraphite2-3 amd64 1.3.14-1build2 [71.3 kB] Get:87 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libharfbuzz0b amd64 2.7.4-1ubuntu3.2 [353 kB] Get:88 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libthai-data all 0.1.29-1build1 [162 kB] Get:89 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdatrie1 amd64 0.2.13-2 [19.9 kB] Get:90 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libthai0 amd64 0.1.29-1build1 [19.2 kB] Get:91 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpango-1.0-0 amd64 1.50.6+ds-2ubuntu1 [230 kB] Get:92 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpangoft2-1.0-0 amd64 1.50.6+ds-2ubuntu1 [54.0 kB] Get:93 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpangocairo-1.0-0 amd64 1.50.6+ds-2ubuntu1 [39.8 kB] Get:94 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxv1 amd64 2:1.0.11-1build2 [11.2 kB] Get:95 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 gstreamer1.0-x amd64 1.20.1-1ubuntu0.4 [85.1 kB] Get:96 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libibverbs1 amd64 39.0-1 [69.3 kB] Get:97 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 ibverbs-providers amd64 39.0-1 [341 kB] Get:98 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 ipxe-qemu all 1.21.1+git-20220113.fbbdc3926-0ubuntu1 [1,569 kB] Get:99 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 ipxe-qemu-256k-compat-efi-roms all 1.0.0+git-20150424.a25a16d-0ubuntu4 [552 kB] Get:100 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libatk1.0-data all 2.36.0-3build1 [2,824 B] Get:101 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libatk1.0-0 amd64 2.36.0-3build1 [51.9 kB] Get:102 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libatk-bridge2.0-0 amd64 2.38.0-3 [66.6 kB] Get:103 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libavahi-common-data amd64 0.8-5ubuntu5.2 [23.8 kB] Get:104 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libavahi-common3 amd64 0.8-5ubuntu5.2 [23.9 kB] Get:105 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libavahi-client3 amd64 0.8-5ubuntu5.2 [28.0 kB] Get:106 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libboost-iostreams1.74.0 amd64 1.74.0-14ubuntu3 [245 kB] Get:107 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libboost-thread1.74.0 amd64 1.74.0-14ubuntu3 [262 kB] Get:108 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libbrlapi0.8 amd64 6.4-4ubuntu3 [28.7 kB] Get:109 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libpcsclite1 amd64 1.9.5-3ubuntu1 [19.8 kB] Get:110 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libcacard0 amd64 1:2.8.0-3build2 [38.0 kB] Get:111 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 liblcms2-2 amd64 2.12~rc1-2build2 [159 kB] Get:112 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libcolord2 amd64 1.4.6-1 [155 kB] Get:113 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libcups2 amd64 2.4.1op1-1ubuntu4.11 [263 kB] Get:114 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdaxctl1 amd64 72.1-1 [19.8 kB] Get:115 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libwayland-client0 amd64 1.20.0-1ubuntu0.1 [25.9 kB] Get:116 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdecor-0-0 amd64 0.1.0-3build1 [15.1 kB] Get:117 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libwayland-cursor0 amd64 1.20.0-1ubuntu0.1 [10.7 kB] Get:118 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libdecor-0-plugin-1-cairo amd64 0.1.0-3build1 [20.4 kB] Get:119 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libdrm-amdgpu1 amd64 2.4.113-2~ubuntu0.22.04.1 [19.9 kB] Get:120 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libpciaccess0 amd64 0.16-3 [19.1 kB] Get:121 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libdrm-intel1 amd64 2.4.113-2~ubuntu0.22.04.1 [66.7 kB] Get:122 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libdrm-nouveau2 amd64 2.4.113-2~ubuntu0.22.04.1 [17.5 kB] Get:123 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libdrm-radeon1 amd64 2.4.113-2~ubuntu0.22.04.1 [21.6 kB] Get:124 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libepoxy0 amd64 1.5.10-1 [237 kB] Get:125 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libwayland-server0 amd64 1.20.0-1ubuntu0.1 [34.3 kB] Get:126 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-randr0 amd64 1.14-3ubuntu3 [18.3 kB] Get:127 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgbm1 amd64 23.2.1-1ubuntu3.1~22.04.3 [33.5 kB] Get:128 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf2.0-bin amd64 2.42.8+dfsg-1ubuntu0.3 [14.2 kB] Get:129 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgfxdr0 amd64 10.1-1ubuntu0.2 [22.3 kB] Get:130 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libglusterfs0 amd64 10.1-1ubuntu0.2 [287 kB] Get:131 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgfrpc0 amd64 10.1-1ubuntu0.2 [47.1 kB] Get:132 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgfapi0 amd64 10.1-1ubuntu0.2 [77.3 kB] Get:133 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglapi-mesa amd64 23.2.1-1ubuntu3.1~22.04.3 [35.4 kB] Get:134 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-amber-dri amd64 21.3.9-0ubuntu1~22.04.1 [4,218 kB] Get:135 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libllvm15 amd64 1:15.0.7-0ubuntu0.22.04.3 [25.4 MB] Get:136 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libsensors-config all 1:3.6.0-7ubuntu1 [5,274 B] Get:137 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libsensors5 amd64 1:3.6.0-7ubuntu1 [26.3 kB] Get:138 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-dri3-0 amd64 1.14-3ubuntu3 [6,968 B] Get:139 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-mesa-dri amd64 23.2.1-1ubuntu3.1~22.04.3 [8,860 kB] Get:140 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-dri2-0 amd64 1.14-3ubuntu3 [7,206 B] Get:141 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-glx0 amd64 1.14-3ubuntu3 [25.9 kB] Get:142 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-present0 amd64 1.14-3ubuntu3 [5,734 B] Get:143 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-sync1 amd64 1.14-3ubuntu3 [9,416 B] Get:144 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcb-xfixes0 amd64 1.14-3ubuntu3 [9,996 B] Get:145 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxshmfence1 amd64 1.3-1build4 [5,394 B] Get:146 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxxf86vm1 amd64 1:1.1.4-1build3 [10.4 kB] Get:147 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglx-mesa0 amd64 23.2.1-1ubuntu3.1~22.04.3 [158 kB] Get:148 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libwayland-egl1 amd64 1.20.0-1ubuntu0.1 [5,582 B] Get:149 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcomposite1 amd64 1:0.4.5-1build2 [7,192 B] Get:150 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxcursor1 amd64 1:1.2.0-2build4 [20.9 kB] Get:151 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxinerama1 amd64 2:1.1.4-3 [7,382 B] Get:152 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxkbcommon0 amd64 1.4.0-1 [125 kB] Get:153 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxrandr2 amd64 2:1.5.2-1build1 [20.4 kB] Get:154 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgtk-3-common all 3.24.33-1ubuntu2.2 [239 kB] Get:155 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgtk-3-0 amd64 3.24.33-1ubuntu2.2 [3,053 kB] Get:156 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgtk-3-bin amd64 3.24.33-1ubuntu2.2 [69.6 kB] Get:157 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 librdmacm1 amd64 39.0-1 [71.2 kB] Get:158 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libiscsi7 amd64 1.19.0-3build2 [70.6 kB] Get:159 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libndctl6 amd64 72.1-1 [57.7 kB] Get:160 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libpmem1 amd64 1.11.1-3build1 [81.4 kB] Get:161 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libpmemobj1 amd64 1.11.1-3build1 [124 kB] Get:162 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 librados2 amd64 17.2.7-0ubuntu0.22.04.2 [3,594 kB] Get:163 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 librbd1 amd64 17.2.7-0ubuntu0.22.04.2 [3,548 kB] Get:164 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 librsvg2-2 amd64 2.52.5+dfsg-3ubuntu0.2 [2,974 kB] Get:165 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 librsvg2-common amd64 2.52.5+dfsg-3ubuntu0.2 [17.7 kB] Get:166 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libxss1 amd64 1:1.2.3-1build2 [8,476 B] Get:167 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libsdl2-2.0-0 amd64 2.0.20+dfsg-2ubuntu1.22.04.1 [582 kB] Get:168 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libslirp0 amd64 4.6.1-1build1 [61.5 kB] Get:169 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libspice-server1 amd64 0.15.0-2ubuntu4 [351 kB] Get:170 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 liburing2 amd64 2.1-2build1 [10.3 kB] Get:171 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libusbredirparser1 amd64 0.11.0-2build1 [15.9 kB] Get:172 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 libvirglrenderer1 amd64 0.9.1-1~exp1ubuntu2 [188 kB] Get:173 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libvte-2.91-common amd64 0.68.0-1ubuntu0.1 [9,408 B] Get:174 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libvte-2.91-0 amd64 0.68.0-1ubuntu0.1 [214 kB] Get:175 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libfdt1 amd64 1.6.1-1 [20.0 kB] Get:176 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 qemu-system-common amd64 1:6.2+dfsg-2ubuntu6.26 [2,047 kB] Get:177 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 qemu-system-data all 1:6.2+dfsg-2ubuntu6.26 [1,430 kB] Get:178 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 seabios all 1.15.0-1 [174 kB] Get:179 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 qemu-system-x86 amd64 1:6.2+dfsg-2ubuntu6.26 [10.1 MB] Get:180 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 qemu-utils amd64 1:6.2+dfsg-2ubuntu6.26 [1,527 kB] Get:181 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 qemu-block-extra amd64 1:6.2+dfsg-2ubuntu6.26 [68.2 kB] Get:182 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libglvnd0 amd64 1.4.0-1 [73.6 kB] Get:183 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libglx0 amd64 1.4.0-1 [41.0 kB] Get:184 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libgl1 amd64 1.4.0-1 [110 kB] Get:185 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 qemu-system-gui amd64 1:6.2+dfsg-2ubuntu6.26 [220 kB] Get:186 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 ovmf all 2022.02-3ubuntu0.22.04.3 [7,561 kB] Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libnl-route-3-200 amd64 3.5.0-0.1 [180 kB] Fetched 102 MB in 38s (2,707 kB/s) Extracting templates from packages: 100%
最新发布
07-15
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值