chroot下二进制程序迁移

#!/bin/bash

#

#define function
#Copy binary program
cp_bin(){
  cmd_dir=${cmd_path%/*}
  [ ! -d /mnt/sysroot$cmd_dir ] && mkdir -p /mnt/sysroot$cmd_dir &> /dev/null
  if [ ! -e /mnt/sysroot$cmd_path ];then
    cp $cmd_path /mnt/sysroot$cmd_dir
  else
    echo "Command already exists."
  return 1
  fi
}
#Copy shared libraries
cp_lib(){
  while read lib_line;do
  lib_dir=${lib_line%/*}
  [ ! -d /mnt/sysroot$lib_dir ] && mkdir -p /mnt/sysroot$lib_dir &> /dev/null
  if [ ! -e /mnt/sysroot$lib_line ];then
    cp $lib_line /mnt/sysroot$lib_dir
  fi
done < /tmp/cmd_lib

}

#main
read -p "Please enter a name for the executable command:" cmd
cmd=${cmd:=bash}
until [ $cmd == "quit" ];do
  if which $cmd &> /dev/null ;then
    cmd_path=`which $cmd | grep -o "/[^[:space:]]\+$"`
    cp_bin
  elif help $cmd &> /dev/null;then
    echo "This is the bash built-in command."
    read -p "Please enter a name for the executable command:" cmd
    continue
  else
    read -p "Command does not exits,please re_enter,or exit(quit):" cmd
    continue
  fi
  if [ $? -eq 0 ];then
    ldd $cmd_path | grep -o "/[^[:space:]]\+" > /tmp/cmd_lib
    cp_lib
  fi
  read -p "To complete the copy command,continue with the next command,or exit(quit):" cmd
  cmd=${cmd:=bash}
done

时间: 2024-10-20 04:03:43

chroot下二进制程序迁移的相关文章

linux下移植指定的二进制程序脚本

一个程序所依赖的库文件可以由:ldd  命令路径来显示 例 ldd /bin/cat  输出详解 第一行输出为库入口,非库文件 which ls|grep -v alias|grep -o'[^[:space:]]*' 脚本中调试方法 declare –i Debuglevel=1 Debuglevel={0|1} [ $Debuglevel –eq 1 ] && echo -$--. 移植脚本如下所示 #!/bin/bash # declare -i DebugLevel=0 Targe

Sysv init脚本+Systemd程序+二进制程序

SysV  init(串行启动低效)是Linux系统操作中不可缺少的程序之一.所谓的init进程,它是一个由内核启动的用户级进程.内核自行启动,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个用户级程序init的方式,完成引导进程.经过调整适应了其它许多发行版,例如RedHat.Suse和CentOS. SysV init脚本(单独管理) 历史上,我们大部分人用过传统的SysV init 初始化脚本,它通常情况下在/etc/rc.d/init.d/文件夹下.这些脚本调用守护进程二进制

如何利用mono把.net windows service程序迁移到linux上

How to migrate a .NET Windows Service application to Linux using mono? 写在最前:之所以用要把windows程序迁移到Linux上,主要是由于一些成本问题,这个就不多解释了. 如何把之前用.net写的windows服务程序迁移到linux上运行.答案是有很多种的,今天我只提一下mono(我只实验了mono,呵呵). 如何在Linux部署mono,并成功的运行.net程序,还请大家多多查询吧,我在这方面也只是搭建成功了,遇到的问

MySQL简介以及二进制程序方式安装

数据的组织结构 层次型 网状型 关系型 使用DBMS的优点 1,数据管理独立性: 2,有效的完成数据存取: 3,保证数据完整性和安全性: 4,数据的集中管理: 5,并发存储与故障恢复: 6,减少应用程序开发时间: 数据库管理系统(DBMS)设计的目标 为了解决: 1,数据的冗余和不一致: 2,数据访问困难: 3,数据孤立: 4,数据完整性问题: 5,数据原子性问题: 6,并发访问问题: 7,安全性问题: DBMS的组件 1,分析器: 2,计划执行器: 3,优化器: 4,文件的存取方法: 5,缓存

Linux下二进制包和源代码包的区分

主要提供三种格式的mysql包:rpm格式.二进制格式.源码格式:(tar打包,gz压缩) rpm格式: libjpeg-devel-6b-33.x86_64.rpm       #rpm格式很好区分, 二进制包: mysql-3.23.58-pc-linux-i686.tar.gz   #二进制格式的包名字很长,有版本号.适应平台.适应的硬件类型等,格式:mysql-<版本>-<OS>-tar.gz 源码包:    php-5.2.14.tar.gz              

Linux下的程序包管理之源码形式

 Linux下程序包管理之源码形式 程序包的前世今生: 说到程序包管理,不得不提到是就是程序包是由什么组成的?也就是怎么形成的?程序是由源代码程序经过预处理.编译.然后汇编形成二进制的程序,这是针对特定硬件而形成的程序.有计算机编程基础的同学都应该知道源代码编译的时候是要调用特定的库(库文件),而这些库,在不同的系统上是不同的,比如Linux和window上的就不同,不同发行版的Linux上的库也不尽相同,所以这就导致了在不同种类系统上编译生成的二进制程序的运行环境也不尽相同,那么这些程序是不能

linux学习之路之使用脚本来复制二进制程序和所需的库文件

首先介绍bash的特殊语法 ${parameter#*word} 其中parameter为变量,word为分隔符,表示从变量最边左字符开始到第一匹配到分隔符(word)之间的字符串都去掉 ${parameter##*word}:表示从变量最左边字符开始到最后一次匹配到该分隔符之间的字符串都去掉 注意:其中变量不要加$符号 当*在分隔符(word)前面时,表示从左开始匹配 当*在分隔符(word)后面时,表示从右开始匹配 ${parameter%word*}:表示从最右边字符开始到第一次匹配到的分

EF 第三篇 生产环境下的数据迁移

前言 本文所谓数据迁移,直白点不如说成数据库升级.虽然大部分带服务器型的应用,所有客户端都是连到同一台服务器上,对这样的生产环境,数据库升级起来不是什么难事,用vs自带的Migration也好,执行sql脚本也好,都比较容易.然而在每家客户现场都要部署一台服务器的应用也不少,如果一家家手工地去升级数据库,那将是一个可怕的工作量.那么对于这样的环境要怎么做到自动升级数据库呢?相信大家也在网上搜了不少了EF关于生产环境下的数据迁移方案,然后99%搜到的都是使用vs自带的Migration命令方式迁移

基于二进制程序安装mariadb

环境:教室,默认lftp的ip地址:172.16.0.1 基于二进制程序必须安装在/usr/local目录下,并且解压后的目录必须叫mysql lftp 172.16.0.1获取到Mariadb-5.5.36安装包 get到当地目录 展开程序: [[email protected] yum.repos.d]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local cd到该目录下 [[email protected] mariadb-5.5