Shanghai Tongfu Technology Blog - Part 2

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part2-准备系统环境

上一节中我们完成了Oracle Linux虚拟机的安装,本节继续进行系统的配置,完成Oracle数据库19c RAC的安装准备工作。

Oracle安装前提

以root用户登录系统虚机ol7-19-rac1,运行以下命令安装Oracle数据库19c依赖包

$ yum install -y oracle-database-preinstall-19c

安装完成运行以下命令更新内核参数

$ /sbin/sysctl -p

创建Oracle安装所需的组与用户

$ groupadd -g 54321 oinstall $ groupadd -g 54322 dba
$ groupadd -g 54323 oper
$ groupadd -g 54324 backupdba
$ groupadd -g 54325 dgdba
$ groupadd -g 54326 kmdba
$ groupadd -g 54327 asmdba
$ groupadd -g 54328 asmoper
$ groupadd -g 54329 asmadmin
$ groupadd -g 54330 racdba
$
$ useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,admadmin,racdba oracle

设置oracle用户密码

$ passwd oracle

编辑/etc/hosts文件,增加以下内容

# Public
10.0.1.101 ol7-19-rac1
10.0.1.102 ol7-19-rac2
# Private
192.168.1.101 ol7-19-rac1-priv
192.168.1.102 ol7-19-rac2-priv
# Virtual
10.0.1.103 ol7-19-rac1-vip
10.0.1.104 ol7-19-rac2-vip
# SCAN
10.0.1.105 ol7-19-scan

确认IP地址对应的网卡均设置为开机启动。 关闭SELinux,编辑/etc/selinux/config文件,设置

SELINUX=disabled

关闭防火墙,运行以下命令

$ systemctl stop firewalld
$ systemctl disable firewalld

关闭chrony服务

$ systemctl stop chronyd
$ systemctl disable chronyd

创建Oracle 19c RAC所需的目录并修改权限

$ mkdir -p /u01/app/19/grid
$ mkdir -p /u01/app/oracle/product/19/db_1
$ chown -R oracle:oinstall /u01
$ chmod -R 775 /u01/

用oracle用户登录系统,在”/home/oracle/.bash_profile”最后一行增加以下内容

# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=ol7-19-rac1
export ORACLE_UNQNAME=CDBRAC
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/19/grid
export DB_HOME=$ORACLE_BASE/product/19/db_1
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=cdbrac1
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

alias grid_env=’. /home/oracle/grid_env’
alias db_env=’. /home/oracle/db_env’

创建名为”/home/oracle/grid_env“的文件,设置集群用户环境,在文件中加入以下内容

export ORACLE_SID=+ASM1
export ORACLE_HOME=$GRID_HOME
export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

创建名为”/home/oracle/db_env”的文件,设置数据库用户环境,在文件中加入以下内容

export ORACLE_SID=cdbrac1
export ORACLE_HOME=$DB_HOME
export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

关闭系统

shutdown -r now

创建共享存储

从Linux主机Ubuntu系统硬盘中划分空间,虚拟出出两台主机可以同时看到的共享LUN,3个1G的盘用作OCR和Voting Disk,其余分了3个12G的盘规划做用做数据盘和FRA。

$ mkdir -p /data1/u04/ol7-19-rac
$ cd /data1/u04/ol7-19-rac
$
$ # Create the disks and associate them with VirtualBox as virtual media.
$ VBoxManage createhd --filename asm-ocr1.vdi --size 1024 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-ocr2.vdi --size 1024 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-ocr3.vdi --size 1024 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-data1.vdi --size 12288 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-data2.vdi --size 12288 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-data3.vdi --size 12288 --format VDI --variant Fixed
$
$ # Connect them to the VM.
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm-ocr1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm-ocr2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm-ocr3.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm-data1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm-data2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 6 --device 0 --type hdd --medium asm-data3.vdi --mtype shareable
$
$ # Make shareable.
$ VBoxManage modifyhd asm-ocr1.vdi --type shareable
$ VBoxManage modifyhd asm-ocr2.vdi --type shareable
$ VBoxManage modifyhd asm-ocr3.vdi --type shareable
$ VBoxManage modifyhd asm-data1.vdi --type shareable
$ VBoxManage modifyhd asm-data2.vdi --type shareable
$ VBoxManage modifyhd asm-data3.vdi --type shareable

启动虚机”ol7-19-rac1″,用root用户登录系统,确认刚刚创建的共享磁盘已成功绑定。

[[email protected] ~]# cd /dev
[[email protected] dev]# ls sd*
sda sda1 sda2 sdb sdc sdd sde sdf sdg
[[email protected] dev]#

使用fdisk命令对新建的磁盘从sdb到sdg进行分区。

[[email protected] ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x62be91cf.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1):
First cylinder (1-652, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652):
Using default value 652
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[[email protected] ~]#

所有磁盘分区完成后,再运行ls命令的结果应该如下所示。

[[email protected] dev]# ls sd*
sda sda2 sdb1 sdc1 sdd1 sde1 sdf1 sdg1
sda1 sdb sdc sdd sde sdf sdg
[[email protected] dev]#

配置UDEV规则,创建或编辑文件”/etc/scsi_id.config”,增加以下内容。

options=-g

查看磁盘的SCSI ID

[[email protected] dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdb
1ATA_VBOX_HARDDISK_VBb5781d10-5cdd8626
[[email protected] dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdc
1ATA_VBOX_HARDDISK_VBdaa6933f-45a7bbd7
[[email protected] dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdd
1ATA_VBOX_HARDDISK_VBff9e560e-3053c1ed
[[email protected] dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sde
1ATA_VBOX_HARDDISK_VB0ce057db-89d80b0f
[[email protected] dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdf
1ATA_VBOX_HARDDISK_VB38c72c62-65c8b2ce
[[email protected] dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdg
1ATA_VBOX_HARDDISK_VB15992f0b-6cff3aca
[[email protected] dev]#

使用上面的磁盘ID,修改”/etc/udev/rules.d/99-oracle-asmdevices.rules” 文件内容。

KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBb5781d10-5cdd8626", SYMLINK+="asm-ocr1", OWNER="oracle", GROUP="asm admin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBdaa6933f-45a7bbd7", SYMLINK+="asm-ocr2", OWNER="oracle", GROUP="asm admin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBff9e560e-3053c1ed", SYMLINK+="asm-ocr3", OWNER="oracle", GROUP="asm admin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB0ce057db-89d80b0f", SYMLINK+="asm-data1", OWNER="oracle", GROUP="as madmin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB38c72c62-65c8b2ce", SYMLINK+="asm-data2", OWNER="oracle", GROUP="as madmin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB15992f0b-6cff3aca", SYMLINK+="asm-data3", OWNER="oracle", GROUP="as madmin", MODE="0660"

加载更新后的磁盘分区表

[[email protected] dev]# /sbin/partprobe /dev/sdb1
[[email protected]ac1 dev]# /sbin/partprobe /dev/sdc1
[[email protected] dev]#/sbin/partprobe /dev/sdd1
[[email protected] dev]# /sbin/partprobe /dev/sde1
[[email protected] dev]# /sbin/partprobe /dev/sdf1
[[email protected] dev]# /sbin/partprobe /dev/sdg1

测试并验证规则正常工作

[[email protected] dev]# /sbin/udevadm test /block/sdb/sdb1

重新加载UDEV规则

[[email protected] dev]# /sbin/udevadm control --reload-rules

现在新增的磁盘规则应该生效,查看确认可列出所有磁盘。如果没有看到,重新修改配置文件。

[[email protected] dev]# ls -al /dev/asm*
lrwxrwxrwx 1 root root 4 Nov 9 20:50 /dev/asm-data1 -> sde1
lrwxrwxrwx 1 root root 4 Nov 9 20:55 /dev/asm-data2 -> sdf1
lrwxrwxrwx 1 root root 4 Nov 9 20:55 /dev/asm-data3 -> sdg1
lrwxrwxrwx 1 root root 4 Nov 9 20:55 /dev/asm-ocr1 -> sdb1
lrwxrwxrwx 1 root root 4 Nov 9 20:26 /dev/asm-ocr2 -> sdc1
lrwxrwxrwx 1 root root 4 Nov 9 20:25 /dev/asm-ocr3 -> sdd1


/dev/asm:
[[email protected] dev]#

成功为配置好RAC集群所需的共享磁盘,关闭虚机”ol7-19-rac1″。

[[email protected] dev]# shutdown -h now

创建第二台虚机

打开VirtualBox管理界面,右键点击左侧的”ol7-19-rac1″,在弹出菜单选择”Clone”。把新机器命名为”ol7-19-rac2″,Next完成第二台虚机的创建。 Clone VM 虚机创建后,在Linux主机运行以下命令,绑定共享磁盘到新建的虚机。

$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm-ocr1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm-ocr2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm-ocr3.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm-data1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm-data2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 6 --device 0 --type hdd --medium asm-data3.vdi --mtype shareable

启动”ol7-19-rac2″,以root用户登录,更新主机名及IP地址信息。
  • 主机名:ol7-19-rac2
  • enp0s3: IP=10.0.1.102 Netmask=255.255.255.0
  • enp0s8: IP=192.168.1.102 Netmask=255.255.255.0
修改”/home/oracle/.bash_profile”,”/home/oracle/grid_env”和”/home/oracle/db_env”文件,对应更新ORACLE_HOSTNAME和ORACLE_SID值。 重启虚拟机”ol7-19-rac2″,用root用户登录系统,重新加载磁盘分区和UDEV规则,确认可以查看到所有asm有磁盘。 至此,我们完成了Oracle 19c RAC安装的准备工作。关闭虚机,备份虚拟机后准备进行Grid Infrastructure的安装。

$ zip PreGrid.zip *.vdi

 

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part1-安装虚拟机

起因

Oracle于9月份举办了针对合作伙伴的Oracle数据库19c新功能培训,并号召ISV进行国内第一轮的应用系统数据库认证。请郭老板着手准备认证所需的资料,没想到郭同学一再跳票,问了原因才知道是没有RAC环境导致,自告奋勇在公司服务器上帮他搭建环境。想着装RAC无非是举手之劳,没想到凭着以前的经验安装Oracle RAC,还是踩了不少的坑,是为之记。

所需软件

在安装前,准备好搭建环境所需的软件。

安装VirtualBox

我是在Ubuntu 19.10下安装VirtualBox软件,使用以下命令完成安装,如果是其他Linux发行版或者Windows请运行相应命令。

$ sudo dpkg -i virtualbox-6.0_6.0.14-133895~Ubuntu~bionic_amd64.deb

创建虚机 我们计划部署两节点的RAC,所以先创建一个虚机,配置好RAC所需的环境参数,然后复制虚机得到第二个节点。 启动VirtualBox,点击工具栏的New按钮,名称设置为ol7-19-rac1,操作系统类型为Linux,版本为Oracle(64-bit),点击Next 设置“16384”做为内存大小,点击Next。 Memory Size 硬盘页面接受默认的创建新虚拟硬盘,点击Create。 Hard Disk 进入硬盘创建向导,接受默认的VDI硬盘类型,点击Next Hard disk file type 存储方式接受默认的“Dynamically allocated”,点Next Storage on physical hard disk 接受默位置,设置硬盘尺寸为100G,点击Create完成虚拟机的创建。 File location and size 新建名称为“ol17-19-rac1”的虚拟机将在窗口左边列出(忘了截图,用最后的图代替:)),右边窗口点Network链接。 VM List 确认Adapter 1已启用,并设置为Bridged Adapter(因为安装RAC环境要在公司内部网络测试,所以设置为Bridged,如果本机如果本机测试可设置为NAT)。点击Adapter 2页 Adapter 1 确认Adapter 2已启用,并且设置为“Internal Network”。 Adapter 2 点击左侧页面的System,把Boot Order列表中的Floppy去掉。完成虚机的设置。

在虚机安装Oracle Linux

在新创建虚机把光驱映射到下载好的Oracle Linux 7.5的光盘映像文件V975367-01.iso,点击Start启动虚机。 利用光盘启动系统,按I进入Oracle Linux 7.5的安装。 选择以下包进行Oracle Linux的安装
  • Server with GUI
  • Hardware Monitoring Utilities
  • Large Systems Performance
  • Network file system client
  • Performance Tools
  • Compatibility Libraries
  • Development Tools
并对主机名及IP地址进行以下设置: 主机名:ol7-19-rac1 enp0s3: IP=10.0.1.101 Netmask=255.255.255.0 enp0s8: IP=192.168.1.101 Netmask=255.255.255.0 完成虚机Oracle Linux 7.5的安装,重启进入系统。 刚装完系统可能存在虚拟机系统中鼠标移位或者鼠标不工作等情况,可点击VirtualBox的Devices菜单,选择Insert Guest Additions CD images…,装载虚机工具光盘。 在虚拟机Oracle Linux系统里点击Run完成虚机驱动程序的安装(如果出错可通过yum upgrade升级Linux内核解决)。 下一步我们将在虚机系统里进行安装的准备配置,并生成第二台虚拟机。  

UiPath流程中输入点号

做UiPath Level 3 – Advanced Training的Generate Yearly Report任务,设计完Upload Year Report工作流后按常规做单元测试,手动设定了输入参数。

但当跑测试流程里,发现到了输入文件路径活动时,到了扩展名的点字符时流程就卡住了。

开始时以为是字符转义问题,在输入参数的文件名字符串里加上了转义符,但是还是卡在输入文件名环节。折腾了老半天,百思不得其解。

后来无意中发现自己的输入语言是中文,但是输入法是转到了英文输入。难道是这个问题导致的,于是把语言改到中文,重新测试,一次就跑通了。

把Generate Yearly Report整个工作流打包上传到UiPath网站,隔了几分钟就邮件通过说评估通过了。登上网站,很Happy的下载了完成任务的证书。

从这次培训学习中得到的几个经验教训:
1. 注意在开发及测试环境在英文环境;
2. 使用IE浏览器会少很多麻烦;
3.有时候电脑速度太快会使流程捕捉不到页面元素,可以在活动中设置Delay。

解决UiPath REFramework的Cannot assign from type ‘UiPath.Core.QueueItem’ to type ‘System.Data.DataRow’问题

在UiPath Academy做Level 3 – Advanced Training的指定练习Calculate Client Security Hash,使用UiPath的Robotic Enterprise Framework(REFramework)框架,照着向导资料设计好所有工作流,兴冲冲的运行时却抛出了Cannot assign from type ‘UiPath.Core.QueueItem’ to type ‘System.Data.DataRow’ in Assign activity ‘End Process’.错误,流程直接退出。

重复检查,确认自己已经把所有的变量与参数类型均正确设置,但是死活就跑不过去。反复折腾,后来用一个非常诡异的方法解决。

在Main流程下打开End Process,把End Process活动下的赋值TransactionItem=Nothing的Nothing去掉,保存流程。重新设置一次TransactionItem=Nothing,然后保存。

再试试运行流程,神奇地能够正常工作。

BTW:此设置对Cannot assign from type ‘UiPath.Core.QueueItem’ to type ‘System.String’ in Assign activity ‘End Process’.错误同样有效。

安装Oracle JET Core Extension for VSCode

2019年5月20日,Oracle发布了JET 7.0.1版本,同时释出了JET Core Extension for VSCode Beta版。作为VS Code重度用户的俺来说,当然是第一时间下来尝鲜了。

因为是Beta版,该扩展并没有正式发布在VS Code Marketplace,需要在OTN下载手动安装。俺在MAC下用Chrome下载后,发现扩展程序安装文件扩展名为zip,VS Code并没不能辨认,尝试把文件扩展名手工改为VSIX,但在MAC下VS Code还是没能认出是扩展程序(ps:大概是文件权限的问题,但是找到了新方法,就没有去试)。

无意中发现使用Safari在OTN下载文件是正常的VSIX扩展名,后来在Oracle社区发现有人在讨论此问题,说Chrome会自动把文件扩展改为zip,换成Firefox或Edge下载就正常。

打开VS Code,点开左边扩展图标,点右上角的 “…” 打开更多操作菜单,选择“从VSIX安装…”。

 

选择下载的oracle-jet-core-0.5.0.vsix文件,安装JET Core Extension for VSCode。好了,现在可以体验JET的智能提醒和自动完成功能了。

解决Jdeveloper 12C(12.2.1.3.0) CreateProcess error=206问题

已经有阵子没用Jdev写东西了,因一个客户项目,周末打开Jdeveloper写了个Web Service客户端的Java示例程序。驾轻就熟从WSDL生成客户端代码,写了Impl实现,运行测试却碰到了问题,系统提示了以下文件名或扩展名过长的错误信息:

The target .jpr cannot be started because an exception was thrown: java.io.IOException: Cannot run program “C:\Java\jdk1.8.0_121\bin\javaw.exe” (in directory “C:\\src\”): CreateProcess error=206, The filename or extension is too long

仔细看了下错误信息,大概是因为库文件的原因,以下列方式解决:

打开项目属性窗口,把自动引用的JAX-WS Client和JAX-WS Web Service删除掉。

菜单Tools—–>Manage Libraries…

点击New,新建一个名为“ My JAX-WS Client ”用户库,点击“Add Entry”,选择
<JDev安装目录>\wlserver\server\lib\weblogic.jar
<JDev安装目录>\oracle_common\modules\internal\features\jrf_wlsFmw_oracle.jrf.wls.classpath.jar
点OK确认。

重复上面操作,新建立名为“ My JAX-WS Web Service ”的用户库,加入
<JDev安装目录> \wlserver\server\lib\weblogic.jar
点击OK确认。

回到项目属性窗口,加入刚创建的两个用户库,再次Run JAVA代码,成功运行。

后来空了查了下Oracle Support,发现这个问题是Jdeveloper 12.2.1.3.0的一个bug,官方已经有补丁程序释出,具体可以参考Running a Java Class Fails With “CREATEPROCESS ERROR=206” (Doc ID 2330982.1)。

设置Ubuntu Server 18.04自动更新

厌倦了登录服务器经常提示有N个补丁需要更新,需要重新启动之类的,可以通过服务器自动更新解决。

1.安装自动更新支持包

安装unattended-upgrades包。

sudo apt install unattended-upgrades

2.配置自动更新

编辑配置文件

sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

该文件前半段长这样子:

最重要的是把“updates”这一行注释去掉。

“${distro_id}:${distro_codename}-updates”;

建议把自动清理不用内核文件的行也同时打开。

Unattended-Upgrade::Remove-Unused-Kernel-Packages “true”;
Unattended-Upgrade::Remove-Unused-Dependencies “true”;

自动重启及时间看个人喜好打开。

3.启用自动更新

sudo vi /etc/apt/apt.conf.d/20auto-upgrades

按需要修改内容

APT::Periodic::Update-Package-Lists “1”;
APT::Periodic::Download-Upgradeable-Packages “1”;
APT::Periodic::AutocleanInterval “3”;
APT::Periodic::Unattended-Upgrade “1”;

4.确认是配置是否起作用

用dry run方式看自动更新配置是否起作用

sudo unattended-upgrades –dry-run –debug

如何从Oracle Container Registry下载Docker镜像

习惯于从Oracle的github站点下载dockerfile,修改后生成自己所需的镜像。但是最近有个项目,自己生成镜像文件后发现磁盘居然满了,连容器都没法跑起来。查了一下镜像占用的磁盘空间,一下子被数字吓到了。


$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE


1c98d8816e19 About an hour ago 3.57GB


localhost/oracle/soasuite 12.2.1.3 078faf1a877d 7 days ago 13.5GB


oracle/fmw-infrastructure 12.2.1.3 d37d67bf7981 8 days ago 5.56GB


oracle/database 18.3.0-ee d9b807a62d9b 2 weeks ago 18GB

被动辄10几个G镜像,这容器怎么跑。但是为了项目可以快速测试,也只能想办法减少镜像的尺寸。看到github上有人吐槽这个问题,O记的工程师建议是去Oracle Container Registry上pull镜像。

去https://container-registry.oracle.com看了一眼,发现同样的image确实要小很多。于是从善如流,决定pull镜像下来用。

先login到站点


docker login container-registry.oracle.com

输入用户名密码后,运行pull镜像命令,连续试了几次都是报了镜像not found: does not exist or no pull access的错。

查了老半天原因,最后发现原来坑爹的O记是需要在Oracle Container Registry的页面上接受协议,才能有下载到镜像。

登录网站,在你需要下载的镜像页面点击协议,在弹出窗口接受协议,然后页面会显示当前用户协议的有效时间。再到系统里用命令pull镜像,正常下载。

Yum Update Error after upgrade CentOS from 6 to 7

一无聊又搞事情,把一台CentOS机器直接从6升级到7,结果升级后要安装东西时,用yum update出现了错误,显示python(abi) = 2.6 is needed by (installed) python-argparse-1.2.1-2.el6.centos.noarch。

放狗搜了半天,试了几种方法还是搞不好。仔细分析具体信息,应该是系统残留的CentOS6包导致的,删除所有的el6包解决问题。

rpm --erase --nodeps $(for pkg in $(rpm -qa | grep '\.el[56]\.' | grep -v kmod | grep -v kernel); do rpm -q $pkg --qf '%{NAME} ' ; done)

解决MacOS xcrun: error: invalid active developer path, missing xcrun的问题

最近开始把VS Code做为主力代码编辑器,结果在MAC上每次打开总提示

Git installation not found.

没有就装呗,打开Console,Git显示

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

重装Xcode command line tool解决

xcode-select  --install