ubuntu搭建APT源简单方法

ubuntu搭建APT源简单方法

一、为什么需要搭建APT源

原因如下:

1、在公司内网离线情况下,ubuntu无法通过apt原生源进行下载

2、有些源国内无法正常访问,需要翻墙

基于以上原因,需要自建APT源

二、准备条件

  1. 需要能够上网的电脑,最好能够登录github、google等外网电脑
  2. 需要一台ubuntu的机器,磁盘要足够大

三、APT环境搭建

3.1、安装apt-mirror软件

sudo apt-get install apt-mirror

3.2、修改mirror.list配置文件

sudo mkdir -p /var/www/html
sudo vi /etc/apt/mirror.list

我的配置文件如下:

############# config ##################
# 设置数据存储目录,路径必须提前存在
# set base_path    /var/spool/apt-mirror
set base_path /var/www/html

# 设置镜像存储位置
# set mirror_path  $base_path/mirror

# 设置临时下载索引位置
# set skel_path    $base_path/skel

# 设置日志,URLs和MD5校验信息存储位置
# set var_path     $base_path/var

# 配置删除过期源脚本位置(默认不删除,方便安装旧版本软件)
# set cleanscript $var_path/clean.sh

# 设置默认架构,i386/amd64,默认下载与本机相同的架构
# set defaultarch  <running host architecture>
set defaultarch amd64

# 设定下载后运行的脚本位置
# set postmirror_script $var_path/postmirror.sh

# 设置是否执行 下载后的脚本操作,默认是1(但是默认没有postmirror.sh脚本)
# set run_postmirror 0

# 设置下载线程数
set nthreads     20

# 是否替换URL中的波浪线,替换成%7E(HTML代码),否则会跳过不进行下载
set _tilde 0
#
############# end config ##############

# ubuntu的APT软件源
#deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
#deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
#deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
#deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
#deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

#clean http://mirrors.ustc.edu.cn ubuntu

# nvidia-docker2 源
#deb https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) / 
#直接使用nvidia-docker2 源地址会有问题,需要修改如下才可以
deb https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 /
#deb https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64 /
#deb https://nvidia.github.io/nvidia-container-runtime/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 /

# docker-ce源
deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu bionic stable

# ros源
deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ bionic main

# vscode源
#deb [arch=amd64,arm64,armhf] http://packages.microsoft.com/repos/code stable main

# bazel源
deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8

clean https://nvidia.github.io ubuntu
clean https://mirrors.tuna.tsinghua.edu.cn ubuntu
clean http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu
clean http://packages.microsoft.com/repos/code

3.3、开始下载镜像软件

sudo apt-miiror

下载镜像过程时间比较长,需要耐心等待。执行过程如下:

root@HANZHIWEI02:~# apt-mirror
Downloading 57 index files using 20 threads...
Begin time: Fri Jan 28 14:20:18 2022
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]...
End time: Fri Jan 28 14:20:29 2022

Processing translation indexes: [TTTTTT]

Downloading 0 translation files using 0 threads...
Begin time: Fri Jan 28 14:20:29 2022
[0]...
End time: Fri Jan 28 14:20:29 2022

Processing DEP-11 indexes: [DDDDDD]

Downloading 0 dep11 files using 0 threads...
Begin time: Fri Jan 28 14:20:29 2022
[0]...
End time: Fri Jan 28 14:20:29 2022

Processing indexes: [PPPPPP]

2.2 GiB will be downloaded into archive.
Downloading 707 archive files using 20 threads...
Begin time: Fri Jan 28 14:20:30 2022
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]...
End time: Fri Jan 28 14:31:46 2022

4.1 GiB in 1406 files and 2 directories can be freed.
Run /mnt/e/ubuntu-apt/var/clean.sh for this purpose.

Running the Post Mirror script ...
(/var/www/html/var/postmirror.sh)

Post Mirror script has completed. See above output for any possible errors.

3.4、安装nginx

sudo apt-get install nginx

3.5、配置nginx的服务

sudo vi /etc/nginx/sites-available/default

我的配置文件如下:

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
    listen 80 default_server;
        # 设置中文编码支持
    charset utf-8; 
    # listen [::]:80 default_server;

    # SSL configuration
    #
    #listen 443 ssl default_server;
    #listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    #ssl_certificate   /mnt/e/ubuntu-apt/key/server.crt;
    #ssl_certificate_key  /mnt/e/ubuntu-apt/key/server.key;
    #ssl_session_timeout 5m;
    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
    #ssl_prefer_server_ciphers  on;

    #ssl_ciphers  HIGH:!aNULL:!MD5;


    # 显示目录
    autoindex on;
    
    # 镜像所在的目录
    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    # server_name _;
    server_name <本机ip地址>;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        #autoindex on;
                #autoindex_exact_size off;
                #autoindex_localtime on;
    }

    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
    #   include snippets/fastcgi-php.conf;
    #
    #   # With php-fpm (or other unix sockets):
    #   fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    #   # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#   listen 80;
#   listen [::]:80;
#
#   server_name example.com;
#
#   root /var/www/example.com;
#   index index.html;
#
#   location / {
#       try_files $uri $uri/ =404;
#   }
#}

3.6、重启 nginx 服务

sudo service nginx restart

在浏览器打开http://IP,能够考到以下页面,这表示搭建成功

image-20220128144010463

四、修改内网APT源

经过第三章内容, 已经搭建好了简易的APT镜像源,现在只需要将内网电脑上的APT源修改为自己搭建的源即可

修改/etc/apt/sources.list文件

sudo vi  /etc/apt/sources.list

将下面内容:

deb https://repo.t3caic.com/repository/apt-aliyun/ bionic main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-security main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-updates main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-proposed main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-backports main restricted universe multiverse

# docker
#deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu bionic stable

# nvidia-docker2
deb https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /

deb https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /

deb https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/$(ARCH) /

deb https://nvidia.github.io/nvidia-container-runtime/experimental/ubuntu18.04/$(ARCH) /

deb https://nvidia.github.io/nvidia-docker/ubuntu18.04/$(ARCH) /

# ros
deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ bionic main

# vscode
deb [arch=amd64,arm64,armhf] https://packages.microsoft.com/repos/code stable main

# bazel
deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8

替换为以下内容即可:

  1. 在url中添加自己的ip地址
  2. https需要替换为http,因为搭建的nginx服务没有启用ssl验证

deb https://repo.t3caic.com/repository/apt-aliyun/ bionic main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-security main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-updates main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-proposed main restricted universe multiverse
deb https://repo.t3caic.com/repository/apt-aliyun/ bionic-backports main restricted universe multiverse

# docker
#deb [arch=amd64] http://<自己搭建的ip地址>/mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu bionic stable

# nvidia-docker2
deb http://<自己搭建的ip地址>/nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /

deb http://<自己搭建的ip地址>/nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /

deb http://<自己搭建的ip地址>/nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/$(ARCH) /

deb http://<自己搭建的ip地址>/nvidia.github.io/nvidia-container-runtime/experimental/ubuntu18.04/$(ARCH) /

deb http://<自己搭建的ip地址>/nvidia.github.io/nvidia-docker/ubuntu18.04/$(ARCH) /

# ros
deb http://<自己搭建的ip地址>/mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ bionic main

# vscode
deb [arch=amd64,arm64,armhf] http://<自己搭建的ip地址>/packages.microsoft.com/repos/code stable main

# bazel
deb [arch=amd64] http://<自己搭建的ip地址>/storage.googleapis.com/bazel-apt stable jdk1.8

经过以上步骤,被隔离在内网的电脑能够通过可以访问外网服务电脑来安装所需的apt。

五、rosdep离线源的搭建部署

5.1、解决rosdep init问题

在内网离线执行rosdep init的时候有可能会遇到以下问题:

hanzhiwei@T4-046:~$ sudo rosdep init
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

解决方案一:

  1. 20-default.list下载下来

  2. 20-default.list文件放到/etc/ros/rosdep/sources.list.d目录即可,如果该目录不存在可以新建

解决方案二:

  1. 20-default.list下载下来

  2. 按照apt源的方式,放到nginx的/var/www/html/raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d目录下

  3. 修改/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py文件,将:

    DEFAULT_SOURCES_LIST_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list'

    修改为:

    DEFAULT_SOURCES_LIST_URL = 'http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list'

    即可

5.2、解决rosdep update问题

在内网环境新执行rosdep update汇报以下问题:

hanzhiwei@T4-046:~$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml]:
<urlopen error [Errno 0] Error> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]:
<urlopen error [Errno 0] Error> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml]:
<urlopen error [Errno 0] Error> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml]:
<urlopen error [Errno 0] Error> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml)

解决方法如下:

  1. 将以下内容下载下来,按照APT源搭建方式,放到nginx/var/www/html下的对应目录下

    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml

    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml

    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml

    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml

    https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml

    https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml

    https://raw.github.com/ros/rosdistro/master/releases/targets.yaml

  2. 修改20-default.list文件内容

    sudo vi /etc/ros/rosdep/sources.list.d/20-default.list
    

    将以下内容:

    # os-specific listings first
    yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx

    # generic
    yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
    yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
    yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
    gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte

    # newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

    修改为:

    # os-specific listings first
    yaml http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx

    # generic
    yaml http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
    yaml http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
    yaml http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
    gbpdistro http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte

    # newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

  3. 修改rep3.py文件

    sudo vi /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
    

    将以下内容:

    REP3_TARGETS_URL = 'https://raw.github.com/ros/rosdistro/master/releases/targets.yaml'

    修改为:

    REP3_TARGETS_URL = 'http://<自己搭建的ip地址>/raw.github.com/ros/rosdistro/master/releases/targets.yaml'

  4. 修改__init__.py文件

    sudo vi /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
    

    将以下内容:

    DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'

    修改为:

    DEFAULT_INDEX_URL = 'http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'

  5. 已上修改好后,如果直接执行rosdep update,会发现以下错误

    root@T4-046:~# rosdep update
    reading in sources list data from /etc/ros/rosdep/sources.list.d
    Warning: running 'rosdep update' as root is not recommended.
    You should run 'sudo rosdep fix-permissions' and invoke 'rosdep update' again without sudo.
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
    Query rosdistro index http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
    Add distro "ardent"
    ERROR: error loading sources list:
    HTTP Error 404: Not Found (http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/ardent/distribution.yaml)

  6. 这是因为在index-v4.yaml文件中还有部分文件需要进行下载,根据错误提示和对index-v4.yaml文件进行内容解读,发现还需要下载以下文件,并放到nginx/var/www/html下的对应目录下

    https://raw.githubusercontent.com/ros/rosdistro/master/ardent/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/bouncy/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/crystal/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/dashing/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/eloquent/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/foxy/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/galactic/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/groovy/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/hydro/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/indigo/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/jade/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/kinetic/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/lunar/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/melodic/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/noetic/distribution.yaml
    https://raw.githubusercontent.com/ros/rosdistro/master/rolling/distribution.yaml

  7. 以上文件下载好后,再执行rosdep update即可完成相关操作,执行过程如下

    root@T4-046:~# rosdep update
    reading in sources list data from /etc/ros/rosdep/sources.list.d
    Warning: running 'rosdep update' as root is not recommended.
    You should run 'sudo rosdep fix-permissions' and invoke 'rosdep update' again without sudo.
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
    Hit http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
    Query rosdistro index http://<自己搭建的ip地址>/raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
    Add distro "ardent"
    Add distro "bouncy"
    Add distro "crystal"
    Add distro "dashing"
    Add distro "eloquent"
    Add distro "foxy"
    Add distro "galactic"
    Add distro "groovy"
    Add distro "hydro"
    Add distro "indigo"
    Add distro "jade"
    Add distro "kinetic"
    Add distro "lunar"
    Add distro "melodic"
    Add distro "noetic"
    Add distro "rolling"
    updated cache in /root/.ros/rosdep/sources.cache

5.3、nginx下的目录结构

下载对应文件,存放在nginx目录结构如下,仅供参考:

└── var
└── www
└── html
├── raw.github.com
│ └── ros
│ └── rosdistro
│ └── master
│ └── releases
│ └── targets.yaml
└── raw.githubusercontent.com
└── ros
└── rosdistro
└── master
├── ardent
│ └── distribution.yaml
├── bouncy
│ └── distribution.yaml
├── crystal
│ └── distribution.yaml
├── dashing
│ └── distribution.yaml
├── eloquent
│ └── distribution.yaml
├── foxy
│ └── distribution.yaml
├── galactic
│ └── distribution.yaml
├── groovy
│ └── distribution.yaml
├── hydro
│ └── distribution.yaml
├── index-v4.yaml
├── indigo
│ └── distribution.yaml
├── jade
│ └── distribution.yaml
├── kinetic
│ └── distribution.yaml
├── lunar
│ └── distribution.yaml
├── melodic
│ └── distribution.yaml
├── noetic
│ └── distribution.yaml
├── releases
│ └── fuerte.yaml
├── rolling
│ └── distribution.yaml
└── rosdep
├── base.yaml
├── osx-homebrew.yaml
├── python.yaml
├── ruby.yaml
└── sources.list.d
└── 20-default.list

参考文档

http://t.zoukankan.com/superbi-p-13409529.html
https://www.cnblogs.com/zhjblogs/p/14875296.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容