在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134...

本文介绍如何在Android平台上使用BerkeleyDB11gR2SQL(drop-in模式)替换默认的SQLite库,以实现更高的存储和并发性能。通过详细步骤指导如何编译BDBSQL并集成到Android系统镜像中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134.html)
2010年10月17日
  前文我们介绍了如何编译Berkeley DB SQL(BDB SQL)库并放到Android平台上使用。现在我们来介绍另一种更为彻底的使用方式。依本方法编译得到的BDB库将完全替换Android的 SQLite库,我们称其为drop-in模式。在这种模式下,Android平台上所有的应用程序(包括我们自己编译的应用程序)都将链接到BDB SQL库以获取更高的存储和并发性能。
  本文将使用完整的Android源代码来编译构建我们的全新Android系统镜像,而Android源代码包中包含了交叉编译器,因此我们不需要事先安装NDK。
  1. 编译Android代码
  从Android官方网站获取一份Android源代码,这份源代码有2~3G之巨。
  在Linux平台上,把源代码解压到$HOME/android/android_src
  安装java 1.5版本,(1.6不行),并设置JAVA_HOME和PATH:
  $ export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
  $ export PATH=$JAVA_HOME/bin:$PATH
  先把原始的Android代码完全编译成功(这过程可能要花2~3小时):
  $ cd $HOME/android/android_src
  $ . build/envsetup.sh
  $ make
  可看到生成三个镜像:
  Install system fs image: out/target/product/generic/system.img
  Target ram disk: out/target/product/generic/ramdisk.img
  Target userdata fs image: out/target/product/generic/userdata.img
  2. 安装Android SDK并测试镜像
  安装Android SDK: http://developer.android.com/sdk/installing.html, 安装目录:$HOME/android/android-sdk-linux_86
  安装Android SDK组件: http://developer.android.com/sdk/adding-components .html,选择安装SDK Platform Android 2.1 API 7和Google APIs by Google Inc., Android API 7
  用我们编译得到的镜像替换系统的默认镜像。如果需要替换Windows环境下的sdk,那么以下目录"android-sdk-linux_86″相应应该改成 "android-sdk-windows"。
  $ cd $HOME/android/android-sdk-linux_86/platforms/andro id-2.1
  $ cp -r images images.bak
  $ cp $HOME/android/android_src/out/target/product/gener ic/*.img images
  创建并运行一个新的设备:
  $ cd $HOME/android/android-sdk-linux_86/tools/
  接上页
  $ ./android
  
  (如图)使用图形界面工具创建一个Android 2.1的设备BDBSQL,并点击"start"启动。新的设备第一次启动的时间会非常长,这是正常现象。等到Android界面出现,就说明我们的镜像编译基本没问题了。接下来我们进一步把SQLite库替换为BDB。
  3. 编译BDB SQL
  从http://www.oracle.com/technology/software/products /berkeley-db/index.html下载BDB 11gR2源文件(db-5.0.x.tar.gz),然后
  $ cd $HOME/android/android_src/external/sqlite/dist
  $ tar zxvf db-5.0.x.tar.gz
  $ cp Android.mk Android.mk.bak
  $ cp db-5.0.x/build_android/Android.mk .
  编辑Android.mk,默认的BDB Log和Region文件大小总和可达到十几兆,因此我们有必要修改Android.mk来减小它(可能需要为Android.mk去掉只读属性)。修改第一处LOCAL_CFLAGS如下所示(相对于默认配置,我们删除了-DSQLITE_OMIT_TRUNCATE_OPTIMIZATION,新增了 -DSQLITE_DEFAULT_CACHE_SIZE=256 -DBDBSQL_MAX_LOCKS=1000 -DBDBSQL_MAX_LOCK_OBJECTS=1000):
  LOCAL_CFLAGS += -Wall -DHAVE_USLEEP=1
  -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576
  -DSQLITE_THREADSAFE=1 -DNDEBUG=1 -DSQLITE_TEMP_STORE=3
  -DSQLITE_OS_UNIX=1
  -D_HAVE_SQLITE_CONFIG_H -DSQLITE_THREAD_OVERRIDE_LOCK=-1
  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_BACKWARDS -Dfdatasync=fsync
  -DSQLITE_DEFAULT_CACHE_SIZE=256
  -DBDBSQL_MAX_LOCKS=1000
  -DBDBSQL_MAX_LOCK_OBJECTS=1000
  如果确定不会在多进程间共享数据库,还可以在上述LOCAL_CFLAGS中加入"-DBDBSQL_OMIT_SHARING",这样日志文件不会被写入文件系统,进一步节省了设备空间。
  编译系统镜像中的SQLite部分:
  $ cd $HOME/android/android_src
  $ . build/envsetup.sh
  $ make clean-libsqlite
  $ mmm -B external/sqlite/dist
  $ make snod
  编译好了,再来一次镜像替换:
  $ cp $HOME/android/android_src/out/target/product/gener ic/*.img
  接上页$HOME/android/android-sdk-linux_86/platforms/andro id-2.1/images
  使用图形界面工具删除先前的设备BDBSQL,重创建一个新的Android 2.1设备BDBSQL,并点击"start"启动。这里一定要创建新的设备,因为启动过的设备,其数据库文件已被SQLite生成,BDB SQL无法访问。
  4. 使用BDB SQL
  现在Android里所有应用程序的SQL存储引擎都已被替换为BDB SQL了。我们使用"联系人"来试用一下我们的新设备吧,在Setting里面把Locate设置为中文简体,安装一个中文输入法(比如搜狗),然后打开"联系人",随便增加一条记录:
  
  在主机上我们可以使用adb shell来查看并操作程序所生成的数据库。请留意sqlite3 shell输出的版本信息是Berkeley DB 11gR,同时shell的提示符是dbsql>,这说明我们已经把SQLite成功替换为BDB SQL引擎:
  $ adb shell
  # cd /data/data/com.android.providers.contacts/database s/
  # sqlite3 contacts2.db
  Berkeley DB 11g Release 2, library version 11.2.5.0.21: (March 30, 2010)
  Enter ".help" for instructions
  Enter SQL statements terminated with a ";"
  dbsql> .tables
  _sync_state status_updates
  _sync_state_metadata v1_settings
  activities view_contacts
  agg_exceptions view_contacts_restricted
  android_metadata view_data
  calls view_data_restricted
  contact_entities_view view_groups
  contact_entities_view_restricted view_raw_contacts
  contacts view_raw_contacts_restricted
  data view_v1_contact_methods
  groups view_v1_extensions
  mimetypes view_v1_group_membership
  name_lookup view_v1_groups
  nickname_lookup view_v1_organizations
  packages view_v1_people
  phone_lookup view_v1_phones
  raw_contacts view_v1_photos
  settings
  dbsql> select * from contacts;
  2|逍遥李|||0|0|0|0|1|1|0nE08B4A8BFA37D4||0
  接上页
  dbsql> select * from data;
  1||4|1|0|0|0|li|li|||||||||||||||||
  2||6|2|0|0|0|66666666|1||66666666|||||||||||||||
  3||6|2|0|0|0|88888888|2||88888888|||||||||||||||
  4||8|2|0|0|0|蜀山|1|||||||||||||||||
  5||4|2|0|0|0|逍遥李|逍遥|李||||||||||||||||
  dbsql>
  5. 结束语
  关于BDB SQL库在Android平台上的编译和使用的介绍到这里就结束了。我们用两篇博文分别介绍了side-by-side(并存)和Drop-in(替换)这两种使用方式。在Drop-in模式下,现有的应用程序无修改就可以直接使用BDB SQL引擎。
  BDB SQL在开发过程中始终给予Android平台高度重视,在开发过程中投入了多位资深工程师致力于将BDB SQL移植到Android平台上,并将Android列为产品周期测试的主流平台。OARDC的工程师Zengfa.Dou和Stephen.Tang 给予了我这个初学者极大帮助。在此一并致谢!
  下载数据库软件
  http://www.oracle.com/technetwork/database/berkele ydb/downloads/index.html
<think>我们正在解决Kali Linux中http.kali.org软件源的连接问题。用户遇到了软件源连接问题,导致无法更新软件包。我们将逐步排查并解决网络连接、软件源配置、证书问题等常见原因。 ### 解决Kali Linux软件源连接问题的步骤 #### 一、检查网络连通性 首先确认基础网络连接是否正常: ```bash ping -c 4 http.kali.org ``` - 若无法解析域名:`Name or service not known` 错误 - 若请求超时:`100% packet loss` 错误 **解决方案**: 1. 检查DNS配置(`/etc/resolv.conf`) 2. 尝试更换DNS服务器(如`8.8.8.8`): ```bash echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf ``` 3. 测试其他网站(如`ping google.com`)确认网络状态 #### 二、验证软件源地址 Kali官方推荐使用HTTPS源: ```bash curl -I https://http.kali.org ``` 预期响应:`HTTP/2 200` 或 `301 Moved Permanently` 若返回`SSL certificate problem`,需处理证书问题。 #### 三、修复软件源配置 1. **检查当前源配置**: ```bash cat /etc/apt/sources.list ``` 正常配置应包含: ``` deb https://http.kali.org/kali kali-rolling main non-free contrib ``` 2. **修复错误配置**: ```bash echo "deb https://http.kali.org/kali kali-rolling main non-free contrib" | sudo tee /etc/apt/sources.list ``` 3. **清除旧配置**: ```bash sudo rm /etc/apt/sources.list.d/*.list # 删除第三方源 ``` #### 四、处理HTTPS证书问题 若提示`Certificate verification failed`: 1. 更新CA证书: ```bash sudo apt update sudo apt install --reinstall ca-certificates ``` 2. 强制APT使用HTTP源(临时方案): ```bash sudo sed -i 's|https://|http://|g' /etc/apt/sources.list ``` #### 五、系统代理配置 若使用代理环境: 1. 检查全局代理设置: ```bash env | grep -i proxy ``` 2. 为APT单独配置代理: ```bash echo 'Acquire::http::Proxy "http://proxy-ip:port";' | sudo tee /etc/apt/apt.conf.d/80proxy ``` #### 六、测试软件源更新 ```bash sudo apt clean # 清理缓存 sudo apt update --fix-missing # 强制更新 ``` 常见错误处理: - **Hash Sum mismatch**:更换镜像源(如`mirrors.ocf.berkeley.edu`)[^1] - **Release file expired**:同步系统时间 ```bash sudo apt install ntpdate sudo ntpdate pool.ntp.org ``` ### 镜像源替换方案 若官方源持续不可用,可切换至镜像源: 1. 查找可用镜像: ```bash curl -sSL https://http.kali.org/README.mirrorlist | grep -A 10 "Global Mirror" ``` 2. 替换为美国伯克利镜像: ```bash sudo sed -i 's|http.kali.org|mirrors.ocf.berkeley.edu/kali|g' /etc/apt/sources.list ``` ### 故障排除矩阵 | 错误现象 | 诊断命令 | 解决方案 | |---------------------------|------------------------------|-----------------------------------| | 无法解析域名 | `nslookup http.kali.org` | 更换DNS服务器 | | 连接超时 | `traceroute http.kali.org` | 检查防火墙/路由设置 | | 证书验证失败 | `openssl s_client -connect http.kali.org:443` | 重装`ca-certificates`包 | | 软件包哈希校验失败 | `sudo rm /var/lib/apt/lists/*` | 清理缓存并重试 | > **注意**:Kali Rolling版本需保持源一致性,混合使用不同镜像源可能导致依赖冲突[^3]。 §§相关问题§§ 1. 如何为Kali Linux配置本地镜像源加速更新? 2. 当`apt update`出现`NO_PUBKEY`错误时应如何处理? 3. Kali Linux的软件源签名密钥过期如何更新? 4. 如何验证从Kali软件源下载的软件包完整性?</think>### 解决 Kali Linux `http.kali.org` 软件源连接问题 以下是针对软件源连接问题的完整排查与解决方案,按优先级排序: --- #### 一、基础网络诊断 ```bash ping -c 4 http.kali.org # 测试域名解析 curl -I https://http.kali.org # 检查HTTPS响应 traceroute http.kali.org # 跟踪路由路径 ``` - **若域名无法解析**: 1. 修改DNS配置: ```bash echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf ``` 2. 刷新DNS缓存: ```bash sudo systemctl restart systemd-resolved ``` - **若HTTPS证书错误**: ```bash sudo apt install --reinstall ca-certificates # 重装证书[^3] sudo update-ca-certificates --fresh ``` --- #### 二、软件源配置修复 1. **检查当前源配置**: ```bash cat /etc/apt/sources.list # 查看主配置 ls /etc/apt/sources.list.d/ # 检查附加源 ``` 2. **恢复官方推荐配置**: ```bash echo "deb https://http.kali.org/kali kali-rolling main non-free contrib" | sudo tee /etc/apt/sources.list sudo rm -f /etc/apt/sources.list.d/*.list # 删除第三方源 ``` 3. **强制使用IPv4(解决IPv6问题)**: ```bash echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4 ``` --- #### 三、APT系统修复 ```bash sudo apt clean # 清理缓存 sudo rm -rf /var/lib/apt/lists/* # 删除索引文件 sudo apt update --fix-missing # 强制修复更新 ``` - **若出现`Hash Sum mismatch`错误**: ```bash sudo apt install -o Acquire::BrokenProxy=true update # 绕过代理错误 ``` --- #### 四、镜像源替代方案 若官方源持续不可用,切换到镜像站: ```bash # 使用全球镜像站 sudo sed -i 's|http.kali.org|mirrors.ocf.berkeley.edu/kali|g' /etc/apt/sources.list # 或中国区镜像(若在国内) sudo sed -i 's|http.kali.org|mirrors.tuna.tsinghua.edu.cn/kali|g' /etc/apt/sources.list ``` --- #### 五、高级网络调试 1. **检查防火墙规则**: ```bash sudo iptables -L # 查看规则 sudo ufw disable # 临时禁用防火墙 ``` 2. **诊断TLS握手**: ```bash openssl s_client -connect http.kali.org:443 -showcerts # 验证SSL连接 ``` 3. **代理配置检查**: ```bash env | grep -i proxy # 查看环境变量 sudo rm /etc/apt/apt.conf.d/*proxy* # 删除APT代理配置 ``` --- #### 六、系统级修复 ```bash # 重装网络组件 sudo apt install --reinstall network-manager net-tools # 更新系统关键包 sudo apt dist-upgrade -y ``` > **注意**:Kali Rolling版本需保持源一致性,混合使用不同镜像源可能导致依赖冲突[^1]。 --- ### 典型问题解决方案矩阵 | 故障现象 | 检查命令 | 解决方案 | |---------------------------|-------------------------------|-----------------------------------| | 连接超时 | `telnet http.kali.org 80` | 更换DNS+禁用IPv6 | | 证书无效 | `apt update` 报SSL错误 | 重装`ca-certificates`包 | | 软件包哈希校验失败 | `apt update` 报Hash错误 | 清理缓存+强制更新 | | 源地址重定向失败 | `curl -L http.kali.org` | 手动替换镜像源URL |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值