Openwrt 包管理系统介绍

news2024/12/26 0:25:25

Openwrt 包管理系统介绍

  • 1. OpenWrt简介
    • 1.1 主要特点
    • 1.2 开源嵌入式操作系统
      • 1.2.1 嵌入式系统概念
      • 1.2.2 嵌入式系统分类
      • 1.2.3 嵌入式系统——安卓
      • 1.2.4 嵌入式系统的对比
  • 2 OpenWrt包管理系统
    • 2.1 工作原理
    • 2.2 OPKG命令
      • 2.2.1 命令用法
      • 2.2.2 软件包的管理
      • 2.2.3 查询信息
      • 2.2.4 选项
    • 2.3 OPKG配置
      • 2.3.1 调整软件仓库地址
      • 2.3.2 调整安装目录
      • 2.3.3 代理设置
    • 2.4 OPKG包结构

1. OpenWrt简介

OpenWrt是一个嵌入式设备的Linux发行版,以GPL许可协议发行,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中,可以非常容易地从零开始构建出全功能的智能路由或服务器设备。

OpenWrt项目始于2004年1月,其第一个版本采用了LinkSys的源码。在LinkSys的代码收费后,2005年改为采用正式发布的Linux内核(2.4.30)来集成,并将OpenWrt完全模块化,不断推出补丁和网络驱动。

OpenWrt的主要特点在于其高扩展性,并且文件系统可写,开发者无需在每一次修改后完全重新编译,只要编译自己的软件包即可,这样就加快了开发的进度,令它更像一个小型的Linux 电脑系统,到目前为止已经提供了100多个已编译好的软件,而且数量还在不断增加。另外OpenWrt提供了SDK,每个运行软件均能够以SDK来进行编译,以软件包形式进行安装和卸载。

1.1 主要特点

  • 代码里不含第三方开源包,只包含开源包地址链接。
  • 编译时自动下载源代码、打补丁来满足指定平台要求,并编译。还可以修改Makefile来下载最新的软件包。
  • 使用LuCI作为最终用户管理界面。LuCI以Apache许可协议发布Web管理功能代码。
  • UCI通用配置管理方法。
  • 通过脚本来调用iptables来实现防火墙功能,配置保存在UCI文件中。
  • 开放和可扩展的OPKG格式安装升级包。

1.2 开源嵌入式操作系统

1.2.1 嵌入式系统概念

嵌入式系统,是指嵌入到硬件系统内部,为特定应用功能而设计的专用软件系统。与个 人计算机的通用操作系统不同,嵌入式系统通常只针对特殊的用途。因此可以对它进行优化, 并裁剪到最小。现在通用的硬件系统发展非常迅速,因此出现了在通用硬件系统上的嵌入式操作系统。目前在嵌入式领域广泛使用的操作系统有:Linux、Windows Embedded和VxWorks 等。

1.2.2 嵌入式系统分类

根据用途,操作系统又可以分为:

  • 针对防火墙的操作系统:IPFire;
  • 针对智能路由器领域的嵌入式操作系统:Tomato、OpenWrt等;
  • 针对个人桌面领域操作系统:Ubuntu、Fedora 等;
  • 针对智能终端如手机:Android 、Firefox OS等。

它们均是基于 Linux 内核的操作系统。

1.2.3 嵌入式系统——安卓

安卓系统和我们生活紧密联系,也为大家所熟知,下面介绍下安卓系统,用于与Openwrt进行对比:

  1. Android 是谷歌研发的一款智能终端操作系统,是一种基于 Linux 的开放源代码的操 作系统,主要使用于移动设备,如智能手机、平板计算机、智能电视等。它由谷歌公司和开放手机联盟领导开发。
  2. Android 操作系统最初由安迪·鲁宾开发,最初目的是用于数码相机的操作系统。
  3. 2005年8月谷歌全资收购了Android 操作系统。
  4. 2007年11月,谷歌与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟,共同研发改良Android 系统。随后谷歌以Apache开源许可协议的授权方式发布了Android的源代码,Android以 JAVA 层封装了系统层提供给应用开发者统一的API接口。
  5. 第一部 Android 智能手机发布于 2008年10月。
  6. 目前,Android已逐渐扩展到平板计算机及其他领域,如电视、智能手表、数码相机和游戏机等。
  7. 2015年,Android以85%的市场占有率占据移动操作系统市场之首。
  8. Android 操作系统已经演化为一个移动设备开发平台,其软件层次大体上分为 4 层, 即操作系统内核、中间层、应用程序框架层和应用程序。应用程序框架层为应用程序开发者提供了功能强大的 API,包括图形显示的各种组件,如视图、列表、文本框、按钮以及嵌入式的Web浏览器等。
AndroidOpenWrt
内核Linux 内核Linux 内核
许可协议Apache2.0GNU License
使用场景面向终端用户,手持设备。用户接口采用JAVA 提供图形用户界面GUI服务器、家庭路由器等,用户接口默认为 UCI 命令行提供,也支持通过 Web 方式来管理
开发主导模式由谷歌公司主导开发由 OpenWrt.org 社区主导,社区由个人组成,更开放

1.2.4 嵌入式系统的对比

下表为开源路由器各种发行版本的对比:
在这里插入图片描述

2 OpenWrt包管理系统

OPKG(Open/OpenWrt Package)是一个基于IPKG的轻量快速的软件包管理系统,可以称为IPKG的变种或克隆,目前已成为开源嵌入式系统领域的系统标准。OPKG常用于路由、交换机等嵌入式设备中,用来管理软件包的下载、安装、升级、卸载和查询等,并处理软件包的依赖关系。功能和桌面Linux操作系统Ubuntu中的apt-get、Redhat中的yum类似。

OPKG 是一个针对根文件系统全功能的软件包管理器,用来从本地软件仓库或互联网软件仓库上下载并安装 OpenWrt 软件包。它不仅仅是将软件安装到一个单独的路径(如:/opt),而是根文件系统上。还可以用于安装内核模块和驱动等。OPKG 有时被称为 Entware ,但这主要是针对为嵌入式设备准备的 Entware 仓库。OPKG在安装时会自动解决安装软件时的包依赖关系,如果遇见错误,就中止安装。如果丢失第三方包的依赖关系,源码包依然可用的话,为了忽略依赖关系的错误可以使用 –force-depends 选项。

2.1 工作原理

当执行“opkg update”命令进行软件列表的更新时,OPKG首先会读取配置文件/ etc/opkg.conf,这个文件保存了OPKG的全局配置信息。
在这里插入图片描述
紧接着,OPKG会根据配置地址位置下载软件包列表文件Packages.gz到/var/opkg-list目录下,这个文件是软件仓库中所有软件列表及其依赖关系的清单,是使用gzip压缩的文件,这样在网络传输时所占用网络流量比较小。其后任何安装命令均需首先读取这两个文件。

软件安装之后的信息会保存在目录/usr/lib/opkg/下面,这里就相当于Windows操作系统中的注册表。它包含状态文件,OPKG通过访问这个状态文件确定该软件是否已安装、安装的版本,以及依赖关系是否满足等,从而可以确定安装软件的版本、文件路径等信息。
在这里插入图片描述
在这里插入图片描述
OPKG命令执行会读取以下3部分的信息:配置文件、已安装软件包信息和软件仓库的软件包信息。

  • 配置文件默认位置为/etc/opkg.conf。
  • 已安装软件包状态信息保存在/usr/lib/opkg目录下。
  • 软件仓库的软件包信息保存在/var/opkg-lists目录下。

2.2 OPKG命令

2.2.1 命令用法

OPKG必须带有一个子命令,如果不带有子命令,将输出OPKG的详细使用提示信息。首先是提示必须有一个子命令参数,然后是命令格式提示信息,最后是各个子命令和选项信息含义描述。

/ # opkg
opkg must have one sub-command argument
usage: opkg [options...] sub-command [arguments...]
where sub-command is one of:

Package Manipulation:
        update                  Update list of available packages
        upgrade <pkgs>          Upgrade packages
        install <pkgs>          Install package(s)
        configure <pkgs>        Configure unpacked package(s)
        remove <pkgs|regexp>    Remove package(s)
  
Informational Commands:
        list                    List available packages
        list-installed          List installed packages
        list-upgradable         List installed and upgradable packages
        files <pkg>             List files belonging to <pkg>
        search <file|regexp>    List package providing <file>
        find <regexp>           List packages whose name or description matches <regexp>
        info [pkg|regexp]       Display all info for <pkg>
        status [pkg|regexp]     Display all status for <pkg>
        download <pkg>          Download <pkg> to current directory
        depends [-A] [pkgname|pat]+

Options:
        -A                      Query all packages not just those installed
        -d <dest_name>          Use <dest_name> as the the root directory for
        --dest <dest_name>      package installation, removal, upgrading.
                                <dest_name> should be a defined dest name from
                                the configuration file, (but can also be a
                                directory name in a pinch).
        -o <dir>                Use <dir> as the root directory for
        --offline-root <dir>    offline installation of packages.
        --add-arch <arch>:<prio>        Register architecture with given priority
        --add-dest <name>:<path>        Register destination with given path
Force Options:
        --force-depends         Install/remove despite failed dependencies
         --force-reinstall       Reinstall package(s)
        --force-overwrite       Overwrite files from other package(s)
        --force-downgrade       Allow opkg to downgrade packages

 regexp could be something like 'pkgname*' '*file*' or similar
 e.g. opkg info 'libstd*' or opkg search '*libop*' or opkg remove 'libncur*'

OPKG的功能主要分两类,一种是软件包的管理命令,另外一种是软件包的查询命令。另外还有很多可以修饰的选项。

2.2.2 软件包的管理

软件包的管理是OPKG最重要的功能,主要包含更新软件包列表、安装、卸载和升级等功能。

  1. opkg update
    该命令用于更新可以安装的软件包列表。该命令不需要参数,执行时从服务器地址下载软件包列表文件并存储在/var/opkg-lists/目录下。OPKG在安装或升级时需要读取这个文件,这个文件代表当前仓库中所有可用的软件包。也可以删除该文件来释放存储空间,在安装软件前需要重新获取这个文件。

  2. opkg install
    该命令用于安装软件包,需要一个参数,传递一个软件包名称。如果软件包之间有依赖关系,会自动下载所有被依赖的软件包,并依次将所有被依赖的软件包安装上。如下图所示用于安装smsdemo软件包。
    在这里插入图片描述
    或如下所示代码用于安装file软件包,其所依赖的软件包libmagic会自动安装上:

/# opkg install file 
Installing file (5.11-1) to root... Downloading http://downloads.openwrt.org/attitude_adjustment/12.09/ x86/generic/packages/file_5.11-1_x86.ipk. 
Installing libmagic (5.11-1) to root... 
Downloading http://downloads.openwrt.org/attitude_adjustment/12.09/x86/generic/packages/libmagic _5.11-1_x86.ipk. 
Configuring libmagic. 
Configuring file.
  1. opkg remove
    该命令用于卸载软件包,需要一个参数,传递一个软件包名称。需要注意的是,在安装时自动安装的软件包并不会删除,需要自己手动删除,或者在卸载软件包的同时增加(–autoremove)参数将不需要的安装包也删除。如下所示用于卸载smsdemo软件包:
    在这里插入图片描述
    如下所示代码用于删除file软件包及不再使用的依赖包。
    /# opkg remove file --autoremove
    Removing package file from root…
    libmagic was autoinstalled and is now orphaned, removing.
    Removing package libmagic from root…
  2. opkg upgrade
    该命令用于升级软件包。如果软件包没有安装,该命令执行之后和“opkg install”效果相同。如果升级多个软件包,以空格分隔列在命令之后即可。例如使用opkg upgrade ip wget来升级两个软件包。
    对大多数用户来说,不推荐升级软件包。OpenWrt发布后再进行升级大多数情况下是不可能的,这是因为OpenWrt发布之后一般不再更新,除非主干的快照被编译机器人(buildbot)自动更新。如果内核升级了,可能带来升级风险,因为内核可能和原始安装的应用软件不兼容。因此一般只升级应用,即非内核软件包。

2.2.3 查询信息

OPKG查询命令可以在软件仓库中查询,也可以在运行的系统中查询。OPKG提供了软件包的双向查询功能:正向查询,即从软件包来查询所包含的文件列表;也可以反向查询,从系统中所安装的文件查询所属的软件包。

  1. opkg list
    该命令用于列出所有可使用的软件包,列出内容格式为:软件包名称–版本–描述。描述内容是可以有换行的。如果使用grep命令来查找软件包则需注意,grep是单行匹配,因此使用grep查找的结果并不准确。
    在这里插入图片描述
  2. opkg list-installed
    该命令用于列出系统中已经安装的软件包。
  3. opkg list-changed-conffiles
    该命令用于列出用户修改过的配置文件。
    在这里插入图片描述
  4. opkg files
    该命令用于列出属于这个软件包()中的所有文件,这个软件包必须已经安装。下图示例查看smsdemo软件包所包含文件列表:
    在这里插入图片描述
    如下所示代码用于查看ip软件包所包含的文件列表。
#opkg files ip 
Package ip (3.3.0-1) is installed on root and has the following files: 
/usr/sbin/ip 
/etc/iproute2/rt_tables
  • opkg search
    该命令用于列出提供的软件包,注意:需要传递文件的绝对路径。
    在这里插入图片描述

  • opkg find
    该命令用于列出软件包名称和匹配的软件包。是一个正则表达式,可以精确匹配,也可以使用星号来模糊匹配,例如使用“net”或者“ net*”,均可以匹配NetCat。
    在这里插入图片描述

  • opkg info [pkg]
    该命令用于显示已安装[pkg]软件包的信息,包含软件包名称、版本、所依赖的软件包名称、安装状态和安装时间等。如果没有指定参数则输出所有已安装软件包的信息。“opkg status”和这个命令功能完全相同。
    在这里插入图片描述

  • opkg download
    该命令用于将软件包下载到当前目录。

  • opkg print-architecture
    该命令用于列出安装包的架构。
    在这里插入图片描述

  • opkg whatdepends [-A] [pkg]
    该命令用于针对已安装的软件包,输出依赖这个软件包的软件包。
    在这里插入图片描述

2.2.4 选项

OPKG有很多选项可以使用,这里只列出几个最常用的选项。

  • -A:查询所有的软件包,包含未安装的软件包。
  • -d <dest_name>:使用<dest_name>作为软件包的安装根目录。<dest_name>是配置文件中定义的目录名称。
  • -f <conf_file>:指定使用<conf_file>作为opkg的配置文件。如不指定,默认配置文件是/etc/opkg.conf。
  • –nodeps:不按照依赖来安装,只安装软件包自己。这可能会导致缺少依赖文件,导致程序不能执行。
  • –autoremove:卸载软件包时自动卸载不再使用的软件包(在安装时依赖会自动安装上)。
  • –force-reinstall:强制重新安装软件包,在软件包版本未修改时不会再次安装,增加该选项来强制重新安装。

2.3 OPKG配置

OPKG需要一个配置文件来保存全局配置,例如软件从哪里下载、安装到哪里等。

2.3.1 调整软件仓库地址

OPKG配置文件默认是/etc/opkg.conf。内容参考如下:

src/gz attitude_adjustment http://192.168.1.106:8080/openwrt 
dest root /
dest ram /tmp 
lists_dir ext /var/opkg-lists 
option overlay_root /overlay 

OPKG可以使用多个仓库,每一个仓库需要一个唯一标识符,即使用它们的逻辑名字。例如:

src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09/x86/generic/packa ges/ 
src/gz local http://192.168.1.106:8080/openwrt

2.3.2 调整安装目录

OPKG的一个非常有用的特性,是有能力指定任何安装包的安装目录。安装目录在配置文件/etc/opkg.conf中定义。配置文件中目的地址格式是以dest开头,紧跟着目的地址的名称,最后是目录路径,必须从根目录开始。

dest root / 
dest ram /tmp 
dest usb /opt 

安装目录定义之后,目的地址名称就可以在安装命令中引用了。安装时目的地址名称只能引用在/etc/opkg.conf中定义的地址名称,例如“-d ram”表示软件将安装到临时目录/tmp下。安装命令类似如下格式:

opkg install <pkg> -d <目的地址名称>

2.3.3 代理设置

OPKG通过下载软件包来安装,如果你通过HTTP代理服务器来上网,那就不能直接连接到服务器地址,这时就需要设置代理服务器地址。在/etc/opkg.conf中加入以下设置:

option http_proxy http://proxy.example.org:3128/ 

如果代理服务器需要认证,则需要增加以下认证信息:option proxy_username xxxxxx option proxy_password xxxxxx 如果使用busybox的wget命令,这个工具不支持认证功能,下载时将认证失败。可以改为在URL中传递用户名和密码:

option http_proxy http://username:password@proxy.example.org:3128/

2.4 OPKG包结构

OPKG安装包(ipk文件)是一个gzip压缩文件,可以用file命令来查看文件格式描述。其实,ipk文件就是一个“tar.gz”文件,我们可以用tar命令来解压缩并查看文件内容,其内容包含两个压缩文件和一个版本文件。我们以smsdemo软件包为例来说明安装包格式,首先使用tar命令来解压缩smsdemo的安装包。命令如下:
在这里插入图片描述
解压缩完成后生成3个文件,其中debian-binary是一个纯文本文件,包含字符串“2.0”,表示格式为debian2.0格式。
在这里插入图片描述
data.tar.gz包含“/usr/bin/smsdemo”文件,在安装时复制到安装目录下。
在这里插入图片描述
control.tar.gz解压缩后发现仅包含文件“control”、“postinst”、“prerm”。

在这里插入图片描述
control文件内容包含软件包名称、版本、依赖关系、所属分类、状态、优先级、平台架构和软件描述等。

在这里插入图片描述
控制部分所有文件的含义,如下表:

文件含义
control控制文件,包含软件包名称、版本、依赖关系和所属分类等信息
conffiles配置文件,内容包含该软件的配置文件列表,一个文件占一行
preinst安装文件之前执行脚本
postinst安装文件之后执行脚本,例如安装之后设置用户及启动程序等
prerm卸载之前执行的脚本,例如卸载之前首先结束运行的程序进程
postrm卸载之后执行的脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu 编译linux webrtc库

ubuntu 编译linux webrtc库 安装依赖 sudo apt-get update sudo apt-get install build-essential libssl-dev libasound2-dev libpulse-dev libjpeg-dev libxv-dev libgtk-3-dev libxtst-dev libwebp-dev sudo apt-get install libglib2.0-dev sudo apt-get update 报错时出…

设计测试用例的具体方法总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️白马沉河共歃誓&#xff0c;怒涛没城亦不悔 ☁️基于需求进行测试用例的设计 基…

【Linux】匿名管道与命名管道,进程池的简易实现

文章目录 前言一、匿名管道1.管道原理2.管道的四种情况3.管道的特点 二、命名管道1. 特点2.创建命名管道1.在命令行上2.在程序中 3.一个程序执行打开管道并不会真正打卡 三、进程池简易实现1.makefile2.Task.hpp3.ProcessPool.cpp 前言 一、匿名管道 #include <unistd.h&g…

死磕Nacos系列:Nacos在我的SpringCloud项目中做了什么?

Nacos服务注册 我们一个SpringCloud项目中集成了Nacos&#xff0c;当项目启动成功后&#xff0c;就可以在Nacos管理界面上看到我们项目的注册信息&#xff0c;还可以看到项目的健康状态等等信息&#xff1a; 那Nacos是什么时候进行了哪些操作的呢&#xff1f;今天我们来一探究…

数据挖掘 K近邻

什么时候用K近邻&#xff1f; 交叉验证的时候。最常见的交叉验证方法是K折交叉验证&#xff0c;其中数据集被均匀分成K个子集&#xff0c;称为折&#xff0c;然后执行K次训练和测试&#xff0c;每次选择不同的折作为测试集&#xff0c;其余的作为训练集。最后&#xff0c;将K次…

qt5.15.2及6.0以上版本安装

文章目录 下载在线安装器安装打开软件 下载在线安装器 因为从qt5.15开始不支持离线下载安装了&#xff0c;只能通过在线安装的方式进行安装。 下载在线安装下载器&#xff1a; 这个在线安装下载器网上也都是可以找到。 这里是其放到网盘上的下载地址&#xff1a; 链接&#x…

DBT踩坑第二弹

总结下dbt-spark踩到的坑&#xff0c;连接方式采用的是thrift连接 Kerberos认证。考虑到开源组件Kyuubi也是基于Hiveserver2&#xff0c;使用的thrift协议&#xff0c;所以采用Kyuubi执行SparkSQL。 官方文档给出的Thrift方式连接示例真的是简单&#xff0c;但是真是用起来真是…

01_MySQL介绍及安装

#任务背景 一、真实案例 某公司现在有几套不同版本的MySQL数据库&#xff0c;现在大部分的生产和测试环境都已经切换到5.7版本&#xff0c;由于历史原因&#xff0c;有一套测试环境版本为MySQL-5.5。现为了将测试环境版本统一&#xff0c;需要将原来测试环境数据库MySQL-5.5版…

Linux:创建进程 -- fork,到底是什么?

相信大家在初学进程时&#xff0c;对fork函数创建进程一定会有很多的困惑&#xff0c;比如&#xff1a; 1.fork做了什么事情?? 2.为什么fork函数会有两个返回值?3.为什么fork的两个返回值&#xff0c;会给父进程谅回子进程pid&#xff0c;给子进程返回0?4.fork之后:父子进…

哨兵1号回波数据(L0级)包格式解析与成像参数提取

坑爹的格式,具体有多坑往下看就知道了。matlab代码在文末。 先上首字母缩写: 再来回波数据包的格式图 1. 数据包格式 众所周知,解包的第一步是找帧头和帧长,找到第4~5字节,帧长码为“0x3761”,转十进制为14777,然而实际第一帧整帧的长度是14184。。。你要是加6我还能…

机器学习与因果推断的高级实践 | 数学建模

文章目录 因果推断因果推断的前世今生&#xff08;1&#xff09;潜在结果框架&#xff08;Potential Outcome Framework&#xff09;&#xff08;2&#xff09;结构因果模型&#xff08;Structual Causal Model&#xff0c;SCM&#xff09; 身处人工智能爆发式增长时代的机器学…

LeetCode OJ循环队列(C语言)

1.题目的初步分析 我们分析上述题目的时候会发现题目非常的长&#xff0c;不好整理思路&#xff0c;我这里可以大致的将本题的几个核心点说出来&#xff1a; 1.队列的思路 循环队列说来说去不还是队列嘛&#xff0c;那么队列的基本操作增删查改、以及队列的基本结构肯定都是不能…

京东家用电器商品电子说明书在哪里能找到怎么查看产品电子说明书?草柴返利APP如何查询领取京东优惠券拿京东购物返利?

京东商品电子说明书是一种便捷、高效的说明工具&#xff0c;为消费者了解和使用商品提供了重要帮助。京东商品电子说明书是一种以电子文档、图文、视频的形式提供的商品使用说明书。它通常由商家上传至京东平台&#xff0c;以供消费者在购买商品后下载查看。与传统的纸质说明书…

计算机编程零基础编程学什么语言,中文编程工具构件简介软件下载

计算机编程零基础编程学什么语言&#xff0c;中文编程工具构件简介软件下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如…

Leetcode—94.二叉树的中序遍历【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—94.二叉树的中序遍历 C语言实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned array mus…

Java实现—数据结构 1.初识集合框架

一、什么是集合框架 Java集合框架&#xff0c;又被称为容器&#xff0c;是定义在java.util包下的一组接口interfaces和其实现类classes 其主要表现为将多个元素element置于一个单元中&#xff0c; 集合框架是由若干个类组成的&#xff0c;每个类的背后就是一种数据结构&…

2023.11.25更新关于mac开发APP(flutter)的笔记与整理(实机开发一)

我自己写的笔记很杂&#xff0c;下面的笔记是我在chatgpt4的帮助下完成的&#xff0c;希望可以帮到正在踩坑mac开发APP&#xff08;flutter&#xff09;的小伙伴 目标&#xff1a;通过MAC电脑使用flutter框架开发一款适用于苹果手机的一个APP应用 本博客的阅读顺序是&#xf…

2022年06月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 点击绿旗,舞台上的角色会说出? A:2022年5月1日 B:1日5月2022年 C:2022年05月01日 D:05月01日2022年 答案:C 输出为:2022年05月01日。 第2题 观察规律,请问橙色方块应填…

小程序项目:node+vue基于微信小程序的校园盲盒小程序的设计与实现

项目介绍 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时…

frp V0.52.3 搭建

下载 https://github.com/fatedier/frp/releases/ 此版本暂时没有windows的&#xff0c;想在windows使用请下载v0.52.2 简易搭建 frps.toml的配置文件&#xff0c;以下12000、8500需要在云服务器中的防火墙中开放tcp # bindPort为frps和frpc通信的端口&#xff0c;需要在防…