mirror创设地点Ubuntu私有源,基于Zynq的GNULinux在线编译调试记录

虚拟机运行ubuntu-14.04.5-desktop-amd64系统软件环境,$sudo apt-get install apt-mirror,同时会有两个软件包nfs-common和portmap被安装上

 

apt-mirror建立本地Ubuntu私有源

首先,我们要安装apt-mirror
$sudo apt-get install apt-mirror

假设我们将镜像等文件放在 /service/Ubuntu文件夹下:

请事先新建以下文件夹(mirror.list里面提示要我们事先新建文件夹的):

/service/ubuntu
/service/ubuntu/mirror
/service/ubuntu/skel
/service/ubuntu/var

配置apt-mirror:

======================================

–20171228

$sudo vi /etc/apt/mirror.list

############# config ##################
#
# set base_path /var/spool/apt-mirror
#
# if you change the base path you must create the directories below
with write privlages
#
# set mirror_path  $base_path/mirror
# set skel_path $base_path/skel
# set var_path    $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch  <running host architecture>

#我们添加或更改如下内容:
set base_path /service/ubuntu

set mirror_path  $base_path/mirror
set skel_path $base_path/skel
set var_path    $base_path/var
set cleanscript $var_path/clean.sh
set nthreads    20
set _tilde 0
#
############# end config ##############

#我们把常用的软件同步过来就够用了
deb-i386 hardy main restricted universe
multiverse
deb-i386 hardy-updates main restricted
universe multiverse
deb-i386 hardy-backports main
restricted universe multiverse
deb-i386 hardy-security main restricted
universe multiverse
deb-i386 hardy-proposed main restricted
universe multiverse

#当某些软件包在服务器端进行了升级,或者服务器端不再需要这些软件包时,我们使用了
apt-mirror与服务器同步后,会在本地的$var_path/下生成一个clean.sh的脚本,列出了遗留在本地的旧版本和无用的软件包,你可
以手动运行这个脚本来删除遗留在本地的且不需要用的软件包
clean


如果用amd64位架构下的包,可以加上deb-amd64的标记
如果什么都不加,直接使用deb
http…..这种格式,则在同步时,只同步当前系统所使用的架构下的软件包。比如一个64位系统,直接debhttp….只同步64位的软件
包。如果还嫌麻烦,直接去改set defaultarch  <running
hostarchitecture>这个参数就好,比如改成set defaultarch
i386,这样你使用debhttp…..这种格式,则在同步时,只同步i386的软件包了。

如果你还想要源码,可以把源码也加到mirror.list里面同步过来,比如加上deb-src这样的标记。想要其他的东西也可以追加相应的标记来完成。

配置好后我们就可以和指定的镜像进行同步了
$sudo apt-mirror

如果是第一次同步,官方镜像可能需要几天时间才能同步完整,如果与国内源进行同步,只同步常用软件,平均1秒钟网速1MB(Byte)要同步30G左右的数据,大概需要5-8小时的时间才能同步完整。

同步完成后,我们可以利用clean.sh清理无用软件包(本文档以set base_path
/server/ubuntu为例):
$sudo sh /service/ubuntu/var/clean.sh

更新完毕后,可以使用apache发布源镜像了。

以上摘录 我下载了68个G的 64位源 同步的是mirrors.163.com

下面配置apache2

进入httpd.conf修改
#<Directory />
#    AllowOverride none
#    Require all denied
#</Directory>

改成
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    allow from all
</Directory>

在<IfModule alias_module> 节点中增加虚拟目录
<IfModule alias_module>
    Alias /ubuntu /workspace/ubuntu/mirror/mirrors.163.com/ubuntu
</IfModule>
添加虚拟目录的权限
<Directory “/workspace/ubuntu/mirror/mirrors.163.com/ubuntu”>
      Options Indexes FollowSymLinks
      AllowOverride None
        Require all granted
</Directory>

由于有opengrok 做了个tomcat的端口转发
ProxyPass /source
ProxyPassReverse /source

重启apache即可

客户端配置source.list

sudo vim /etc/source.list

deb [arch=amd64] trusty main
restricted
deb [arch=amd64] trusty-updates main
restricted
deb [arch=amd64] trusty universe
deb [arch=amd64] trusty-updates
universe
deb [arch=amd64] trusty multiverse
deb [arch=amd64] trusty-updates
multiverse
deb [arch=amd64] trusty-backports main
restricted universe multiverse
deb [arch=amd64] trusty-security main
restricted
deb [arch=amd64] trusty-security
universe
deb [arch=amd64] trusty-security
multiverse

sudo apt-get update 即可

给自己的企业建立本地ubuntu-apt仓库源 

首先,我们要安装apt-mirror $sudo apt-get install apt-mirror
假设我们将镜像等文件放在 /service/Ubuntu文件夹下: 请事先…

命令:

1、实验环境

         硬件环境:联想ThinkPad
E430(内存加到10G)、显示屏×2、VGA线×1、HDMI线×1

、鼠标×2、键盘×1、USB分线器×1、ZedBoard开发板套件×1、AD-FMCOMMS2-EBZ×1、网线×1、SD卡×1。

         windows软件环境(E430运行软件):Window 7、VMware Workstation
Pro12、串口调试助手、Win32DiskImager、VMware Workstation
Pro12虚拟机上安装ubuntu-14.04.5-desktop-amd64。

        
虚拟机运行ubuntu-14.04.5-desktop-amd64系统软件环境:gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux、eleclipce等。

        
ZedBoard运行系统:2016_R2-2017_06_29、内核(linux-2017_R1)。

  1. $sudo apt-get install
    nfs-kernel-server           (安装NFS,Ubuntn上默认没有安装)

  2. $showmount -e <Server Address>  
                     (查看list)

  3. $sudo mount <Server
    Address>:/<Path1>    /<Path2>
     (从服务器的Path1挂载到本地Path2)

2、软件安装

====================================================

2.1、安装VMware Workstation Pro12

软件:VMware Workstation 12 Pro

版本:12.0.1 build-3160714

软件来源:

安装教程:VMware Workstation 12 Pro
虚拟机安装步骤详解_百度经验

一、安装NFS
# sudo apt-get install
nfs-kernel-server
同时会有两个软件包nfs-common和portmap被安装上

2.2、安装虚拟系统ubuntu-14.04.5-desktop-amd64

      版本:14.04.5

软件来源:

安装教程:VMware12安装虚拟机教程、Ubuntu16.04安装教程_百度经验

         注意:可参照以下链接提升一下VMware的运行速度:

                                            

二.在/建立共享项目nfst 
# mkdir nfs_shared 
# chmod 777 -R nfs_shared/

2.3、交叉编译环境的搭建

         软  
件:gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

        
软件来源:

 

2.3.1、Ubuntu14.04  64bit系统下安装标准的C开发环境

           sudo apt-get install gcc g++ libgcc1 libg++ make gdb

或者  sudo apt-get install build-essential

 

 

2.3.2下载gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

⑴ 在/usr/local/文件夹下建立名为ARM-toolchain的文件夹

       $ sudo mkdir /usr/local/ARM-toolchain

      

       ⑵
下载gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

       $ cd /usr/local/ARM-toolchain

         $sudo wget
gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

 

       ⑶
安装gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

      
解压gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

         $ xz
–d 
gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

$ tar xvf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar

 

         ⑷ 修改环境变量,把交叉编译器的路径加入到PATH

       修改/etc/bash.bashrc文件(此文件只对当前用户适用)

$sudo gedit  /etc/bash.bashrc

然后在文件的末尾空白处加入一下代码:

export     
PATH=$PATH:/usr/local/ARM-toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin

 

⑸ 使新的环境变量生效(不用重启电脑)

              $ source /etc/bash.bashrc

        

         ⑹ 测试是否安装成功

                  $ arm-linux-gnueabi-gcc -v

执行上面的命令,显示arm-linux-gnueabi-gcc -v信息和版本:

zhangjun@zhangjun-virtual-machine:~/eclipse_workspace/hello/Debug$
arm-linux-gnueabihf-gcc -v

Using built-in specs.

COLLECT_GCC=arm-linux-gnueabihf-gcc

COLLECT_LTO_WRAPPER=/usr/local/ARM-toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/7.2.1/lto-wrapper

Target: arm-linux-gnueabihf

Configured with:
‘/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/snapshots/gcc.git~linaro-7.2-2017.11/configure’
SHELL=/bin/bash
–with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu
–with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu
–with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu
–with-gnu-as –with-gnu-ld –disable-libmudflap –enable-lto
–enable-shared –without-included-gettext –enable-nls
–disable-sjlj-exceptions –enable-gnu-unique-object
–enable-linker-build-id –disable-libstdcxx-pch –enable-c99
–enable-clocale=gnu –enable-libstdcxx-debug –enable-long-long
–with-cloog=no –with-ppl=no –with-isl=no –disable-multilib
–with-float=hard –with-fpu=vfpv3-d16 –with-mode=thumb
–with-tune=cortex-a9 –with-arch=armv7-a –enable-threads=posix
–enable-multiarch –enable-libstdcxx-time=yes
–enable-gnu-indirect-function
–with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf
–with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabihf/libc
–enable-checking=release –disable-bootstrap
–enable-languages=c,c++,fortran,lto –build=x86_64-unknown-linux-gnu
–host=x86_64-unknown-linux-gnu –target=arm-linux-gnueabihf
–prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu

Thread model: posix

gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)

 

保证使用者都能够读、写、执行

2.4、安装Eclipse IDE for C/C++

        
标准的Eclipse只支持JAVA开发,要进行C/C++程序开发,必须安装CDT插件。

在Ubuntu下,可用apt-get命令先安装eclipse-platform,再安装CDT插件eclipse-cdt,可以获得Eclipse
C/C++开发环境。命令如下:

                  $sudo apt-get install eclipse-platform

$sudo apt-get install eclipse-cdt

安装完成,直接输入eclipse命令即可启动Eclipse环境。

 

 

3、Zynq硬件平台搭建

三.修改NFS配置文件
lingd@ubuntu:~$ vi /etc/exports
内容为:
     /home/nfst_shared    
192.168.0.*(rw,sync,no_root_squash,no_subtree_check)

3.1 下载Linux 镜像

Download Linux Image地址:

        
搭建平台教程:

         启动后照片如下图3.1所示:

 

图3.1

   其中:
     /home/nfst_shared
 —要共享的目录
   
 192.168.0.*—允许访问的网段,也可以是ip地址、主机名(能够被服务器解析)、
             
 *(所有人都能访问)
   
 (rw,sync,no_root_squash,no_subtree_check)—
rw:读/写权限
               
sync:数据同步写入内存和硬盘
               
no_root_squash:服务器允许远程系统以root特权存取该目录
no_subtree_check:关闭子树检查

4、NFS服务器

        
PC机虚拟机Ubuntu系统上NFS的安装详见:嵌入式Linux开发教程.PDF(周立功等编著)的6.4章节。

        
ZedBoard的Ubuntu系统上NFS的安装,nfs安装完成后,启动服务器发现如下提示:

                   /mount.nfs:No such device

        
出现这原因是因为内核没有开启nfs功能,因此我们需要重新编译内核。我们将按照下面教程重新编译内核:

         在该教程中的《Configure the
kernel》步骤前用wget打开文件zynq_xcomm_adv7511

_defconfig,先要删除掉# CONFIG_NETWORK_FILESYSTEMS is not
set这一行,并在该位置加上如下配置内容:

CONFIG_NETWORK_FILESYSTEMS=y

CONFIG_NFS_FS=y

CONFIG_NFS_V2=y

CONFIG_NFS_V3=y

# CONFIG_NFS_V3_ACL is not set

# CONFIG_NFS_V4 is not set

# CONFIG_NFS_SWAP is not set

CONFIG_ROOT_NFS=y

# CONFIG_NFSD is not set

CONFIG_LOCKD=y

CONFIG_LOCKD_V4=y

CONFIG_NFS_COMMON=y

CONFIG_SUNRPC=y

# CONFIG_SUNRPC_DEBUG is not set

# CONFIG_CEPH_FS is not set

# CONFIG_CIFS is not set

# CONFIG_NCP_FS is not set

# CONFIG_CODA_FS is not set

# CONFIG_AFS_FS is not set

         添加完成后,保存并关闭wget。然后执行《Configure the
kernel》和之后的步骤。

其他选项可以通过man
exports查阅man文档

5、交叉编译和远程调试

        
程序在主机开发完毕,需要放到到ARM上运行的话,需要重设工程的编译器为交叉编译器并进行重新编译。

        
具体操作详见:嵌入式Linux开发教程.PDF(周立功等编著)的10.4章节。

 

 

四、启动服务
重启portmapper(端口映射)服务
lingd@Ubuntu:~$ sudo service portmap
restart
portmap start/running, process
550
重启NFS服务
lingd@ubuntu:~$ sudo service
nfs-kernel-server restart
 * Stopping NFS kernel daemon          
                                 [ OK ] 
 * Unexporting directories for NFS
kernel daemon…                      [ OK ] 
 * Exporting directories for NFS kernel
daemon…                        [ OK ] 
 * Starting NFS kernel daemon          
                                 [ OK ]

五、测试
1、测试Ubuntu nfs
  此时可以运行以下命令来显示一下共享出来的目录:
  $showmount -e

2、本机挂载
# ls /home/nfst_shared/  
#被挂载的文件夹下面的东西
cross-3.4.1.tar.bz2  linux-2.6.12      
 upload
download             msap              
 VMwareTools-8.1.3-203739.tar.gz
DSDT_2[1].8b.zip     ntp              
  vmware-tools-distrib
DSDT_2.8b            protocol-converter
 安装包

# mkdir /mnt/nfs_test
# ls /mnt/nfs_test/   #空白的
# sudo mount -t nfs -o nolock
localhost:/home/nfs_shared  /mnt/nfs_test/
# ls /mnt/nfs_test/  
 #看到了和/home/nfst_shared/目录下的文件一样,说明挂载成功
cross-3.4.1.tar.bz2  linux-2.6.12      
 upload
download             msap              
 VMwareTools-8.1.3-203739.tar.gz
DSDT_2[1].8b.zip     ntp              
  vmware-tools-distrib
DSDT_2.8b            protocol-converter
 安装包

# sudo umount /mnt/nfs_test
 #解除
# ls /mnt/nfs_test/   #空白的

3、开发板挂载
lingd@Ubuntu:~$ telnet 192.168.0.25
2009
Trying 192.168.0.25…
Connected to 192.168.0.25.

Escape character is ‘^]’.

(none) login: root
Password: 
~ # mkdir
/mnt/nfs_shared_client
~ # ls
/mnt/nfs_shared_client/

~ # mount -t nfs -o nolock
192.168.0.26:/home/nfs_shared   /mnt/nfs_shared_client
~ # ls
/mnt/nfs_shared_client/
cross-3.4.1.tar.bz2  linux-2.6.12      
 upload
download             msap              
 VMwareTools-8.1.3-203739.tar.gz
DSDT_2[1].8b.zip     ntp              
  vmware-tools-distrib
DSDT_2.8b            protocol-converter
 安装包

~ # umount
/mnt/nfs_shared_client
~ # ls /mnt/nfs_shared_client/

~ # 

六、挂载nfs文件系统失败的原因

1、nfs错误信息

Too many levels of remote in
path
:试图挂载一个存在的文件系统

Permission
denied
:NFS服务器不让客户机挂接,也可能是因为用户在服务器上不存在

No such
host
:通常是DNS配置错误

No such file or
directory
:通常是访问的目录不存在

NFS server is not
responding
:通常是NFS已经超过负载或者NFS已经停止工作

Stale file
handle
:在NFS客户端关闭之前客户端访问的文件被删除

Fake
hostname
:Forward和reverse的DNS记录在NFS客户端下不存在

2、挂载nfs文件系统失败的原因

(1)主机和网络不通:看看网线连接、主机和开发板ip是否在同一网段、防火墙有没有关闭等。不仅vmware中linux的防火墙要关闭,vmware外xp的防火墙也要关闭,我就因为xp中的eset杀毒软件的防火墙使nfs无法挂载(可以挂本机,无法挂远程),折腾了一天,后来才发现是xp中的防火墙搞的鬼!

 

(2)使用的mount命令不正确。可以参照上面的例子改一下;或者man
nfs查阅一下nfs的man文档,里面有nfs中mount的使用介绍和选项解释

 

(3)nfs配置文件/etc/exports配置不正确。可以参照上面的例子改一下;或者man
exports查阅一下/etc/exports的man文档

 

(4)必要时重新启动NFS和portmap服务。

sudo service portmap restart

sudo service nfs-kernel-server
restart

 

(5)内核不支持NFS和RPC服务(可能需要重新配置、编译、烧写内核)。

普通的内核应有的选项为CONFIG_NFS_FS=m、CONFIG_NFS_V3=y、CONFIG_
NFSD=m、CONFIG_NFSD_V3=y和CONFIG_SUNRPC=m。

rpcinfo命令用于显示系统的RPC信息,一般使用-p参数列出某台主机的RPC服务。rpcinfo
-p命令检查服务器时,应该能看到portmapper、status、mountd、nfs和nlockmgr。用该命令检查客户端时,应该至少能看到portmapper服务(开发板可能不带该命令)。由rpcinfo
-p可知,nfs使用的port为2049,portmapper使用111port。

 

五、nfs相关的配置文件与命令

1、/etc/exports

NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在(需要自己建立)。

 

2、/usr/sbin/exportfs

用于维护NFS共享资源的命令,用在nfs
server端。修改/etc/exports后,只要使用exportfs重新扫瞄一次
/etc/exports,重新将设定加载即可,并不一定要重启nfs服务

命令格式: exportfs [-aruv]

参数说明如下。

(1)-a:全部挂载或卸载(export or
unexpect)/etc/exports文件内的目录。

(2)-r:重新挂载(reexport)/etc/exports中的目录,并将/var/lib/nfs/etab中的内容与/etc/exports同步。

(3)-u:卸载某些目录。

(4)-v:显示exportfs处理信息。

 

3、/usr/sbin/showmount

用于查看指定主机NFS共享出来的目录资源,主要用在Client端。

命令格式: showmount [-ade]
hostname/服务器ip地址

参数说明如下。

(1)-a或-all:以host:dir格式显示客户主机名和挂载的目录。

(2)-d或-directories:仅显示被客户挂载的目录名。

(3)-e或-exports:显示指定NFS服务器的nfs共享目录。

 

========================================
ubuntu配置NFS 

Ubuntu配置NFS的Client端

Ubuntu配置网络文件共享服务器NFS