• Mirror of Google Android Repository on Ubuntu 10.10

    ###########################################
    # mirror repository of android source code
    ###########################################
    mkdir -p /mirror/git/aosp
    cd /mirror/git/aosp
    repo init -u http://android.gogolesource.com/mirror/manifest.git –mirror
    repo sync -j18
    sudo chown -R gitdaemon .

    #####################################
    # Install Git Daemon on own server (repo.zhenglei.net)
    #####################################
    sudo apt-get install git-daemon-run

    #####################################
    # Update Config of Git Daemon
    #####################################
    cat /etc/sv/git-daemon/run
    #!/bin/sh
    GIT_DAEMON_CONF=”/etc/git-daemon.conf”
    if [ -f ${GIT_DAEMON_CONF} ];then
    GIT_DAEMON=`cat ${GIT_DAEMON_CONF}`
    else
    GIT_DAEMON=””
    fi
    exec 2>&1
    echo ‘git-daemon starting.’
    exec chpst -ugitdaemon \
    “$(git –exec-path)”/git-daemon –verbose  –export-all –reuseaddr  “${GIT_DAEMON}” –base-path=/mirror /mirror/git

    #####################################
    # Restart Git Daemon
    #####################################
    sv stop git-daemon
    sv start git-daemon

    ################################################
    # Access REPO mirror
    ################################################

    ## Clone Whole aosp
    mkdir -p /build/android
    cd /build/android
    repo init -u git://repo.zhenglei.net/aosp/mirror/manifest.git –mirror
    repo sync -j18

    ## Clone Platform only
    repo init -u git://repo.zhenglei.net/aosp/platform/manifest.git –mirror
    repo sync -j18

    ## Clone accessories only
    repo init -u git://repo.zhenglei.net/aosp/accessories/manifest.git –mirror
    repo sync -j18

    ## Clone Kernel only
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/common.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/exynos.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/goldfish.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/msm.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/omap.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/samsung.git
    git  clone –mirror  git://repo.zhenglei.net/aosp/kernel/tegra.git

     

    #Clone Device

    git  clone –mirror  git://repo.zhenglei.net/aosp/device/generic/goldfish.git

    git  clone –mirror  git://repo.zhenglei.net/aosp/device/samsung/tuna.git

    #### Checkout Branching ####

    repo init -u git://repo.zhenglei.net/aosp/platform/manifest.git -b  android-4.1.1_r6.1
    repo sync -j 18

    ## Create New Branching in local ##
    repo start android-4.1.1_r6.1_jrd_dev –all

    ## Push New Branching to the server ##
    sudo sv stop git-daemon
    export GIT_DAEMON=”–enable=receive-pack”
    sudo sv start git-daemon
    repo forall -c git push aosp android-4.1.1_r6.1_jrd_dev
    sudo sv stop git-daemon
    export GIT_DAEMON=
    sudo sv start git-daemon

     

     

     

     

  • Update git on Ubuntu 10.10 for aosp access

    Now, it is  required to have git version 1.7.2 to access Google android repository,  need to update git version on ubuntu 10.10 manually:

    sudo apt-get clean

    sudo apt-get update

    sudo apt-get install libcurl4-gnutls-dev

    wget http://github.com/git/git/archive/v1.7.2.5.zip

    unzip v1.7.2.5.zip

    cd git-1.7.2.5

    make configure

    ./configure –prefix=/usr

    make all

    sudo make install

     

     

     

  • Economic VPS

    Due to the security issue of micolog on Gogle App Engine,  I have to move the blog to VPS with WordPress.

    ComfortHost low end vps is most suitable for my case, compare with several VPS I used before:

    yardvps, ==> one year more, xen based, price hither

    bluevm vps ==> unable to support L2TP vps

    Good technology & support , reasonable cost, support OpenVPN/PPTP/L2PE on my 128M openVZ vps.(blog.zhenglei.net, UK)

    Just purchase 11$/year 256M VPS (US IP) to try IP SEC on it.

    http://www.comforthost.net/billing/cart.php?a=confproduct&i=0

    Following:

    SpotVPS – $10.99/Year 256MB OpenVZ VPS in 4 US locations

     

     

     

     

  • Android mount sdcard

    ===>  execute_media_format
    android/packages/apps/Settings/src/com/android/settings/MediaFormat.java

    ===>  mountService.formatVolume(extStoragePath);
    android/frameworks/base/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java

    ====>  formatVolume
    ====>  doFormatVolume
    android/frameworks/base/services/java/com/android/server/MountService.java

    ===> int CommandListener::VolumeCmd::runCommand
    ===> rc = vm->formatVolume(argv[2]);
    android/system/vold/CommandListener.cpp

    ==> int VolumeManager::formatVolume
    ==> mVolumes = new VolumeCollection();
    ==> return v->formatVol()
    android/system/vold/VolumeManager.h
    android/system/vold/VolumeManager.cpp

    ===> int Volume::formatVol
    ===> Fat::format(devicePath, 0))
    android/system/vold/Volume.cpp

    ===> int Fat::format(const char *fsPath, unsigned int numSectors)
    ===> static char MKDOSFS_PATH[] = “/system/bin/newfs_msdos”
    android/system/vold/Fat.cpp

    android/frameworks/base/services/java/com/android/server/NativeDaemonConnector.java

    # C code
    android/system/vold

    # Launch sd formater in setting
    adb shell
    am start -n com.android.settings/.MediaFormat

    ##############################################################################

    以下是打开“无线和网络设置”界面:

    Intent intent = new Intent(“/”);
    ComponentName cm = new ComponentName(“com.android.settings”,”com.android.settings.WirelessSettings”);
    intent.setComponent(cm);
    intent.setAction(“android.intent.action.VIEW”);
    activity.startActivityForResult( intent , 0);

    以下是可以直接打开的系统界面:

    com.android.settings.AccessibilitySettings 辅助功能设置
    com.android.settings.ActivityPicker 选择活动
    com.android.settings.ApnSettings APN设置
    com.android.settings.ApplicationSettings 应用程序设置
    com.android.settings.BandMode 设置GSM/UMTS波段
    com.android.settings.BatteryInfo 电池信息
    com.android.settings.DateTimeSettings 日期和时间设置
    com.android.settings.DateTimeSettingsSetupWizard 日期和时间设置
    com.android.settings.DevelopmentSettings 应用程序设置=》开发设置
    com.android.settings.DeviceAdminSettings 设备管理器
    com.android.settings.DeviceInfoSettings 关于手机
    com.android.settings.Display 显示——设置显示字体大小及预览
    com.android.settings.DisplaySettings 显示设置
    com.android.settings.DockSettings 底座设置
    com.android.settings.IccLockSettings SIM卡锁定设置
    com.android.settings.InstalledAppDetails 语言和键盘设置
    com.android.settings.LanguageSettings 语言和键盘设置
    com.android.settings.LocalePicker 选择手机语言
    com.android.settings.LocalePickerInSetupWizard 选择手机语言
    com.android.settings.ManageApplications 已下载(安装)软件列表
    com.android.settings.MasterClear 恢复出厂设置
    com.android.settings.MediaFormat 格式化手机闪存
    com.android.settings.PhysicalKeyboardSettings 设置键盘
    com.android.settings.PrivacySettings 隐私设置
    com.android.settings.ProxySelector 代理设置
    com.android.settings.RadioInfo 手机信息
    com.android.settings.RunningServices 正在运行的程序(服务)
    com.android.settings.SecuritySettings 位置和安全设置
    com.android.settings.Settings 系统设置
    com.android.settings.SettingsSafetyLegalActivity 安全信息
    com.android.settings.SoundSettings 声音设置
    com.android.settings.TestingSettings 测试——显示手机信息、电池信息、使用情况统计、Wifi information、服务信息
    com.android.settings.TetherSettings 绑定与便携式热点
    com.android.settings.TextToSpeechSettings 文字转语音设置
    com.android.settings.UsageStats 使用情况统计
    com.android.settings.UserDictionarySettings 用户词典
    com.android.settings.VoiceInputOutputSettings 语音输入与输出设置
    com.android.settings.WirelessSettings 无线和网络设置

    ##############################################################################
    Generate SD Card Image file

    #64G:
    dd if=/dev/zero of=64G.img  count=0 seek=128M

    #8G:
    dd if=/dev/zero of=64G.img  count=0 seek=16M

    #8G (with zero filled)
    dd if=/dev/zero of=64G.img count=16M

    ##############################################################################
    Loop device

    #List loop devices:
    losetup -a

    #Add a loop device
    losetup /dev/loop1 8G_zero.img

    #Delete loop device
    losetup -d /dev/loop1

    find . -type f |xargs grep sd_format
    find . -name *.java |xargs grep sd_format

    ###################################################################
    Modify sd_format of android/packages/apps/Settings/res/values, impact on:

    target R.java/Manifest.java: Settings (out/target/common/obj/APPS/Settings_intermediates/src/R.stamp)
    target Java: Settings (out/target/common/obj/APPS/Settings_intermediates/classes)
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Copying: out/target/common/obj/APPS/Settings_intermediates/classes-jarjar.jar
    Copying: out/target/common/obj/APPS/Settings_intermediates/emma_out/lib/classes-jarjar.jar
    Copying: out/target/common/obj/APPS/Settings_intermediates/classes.jar
    Copying: out/target/common/obj/APPS/Settings_intermediates/noproguard.classes.jar
    target Dex: Settings
    Copying: out/target/common/obj/APPS/Settings_intermediates/noproguard.classes.dex
    target Package: Settings (out/target/product/generic/obj/APPS/Settings_intermediates/package.apk)
    ‘out/target/common/obj/APPS/Settings_intermediates/classes.dex’ as ‘classes.dex’…
    Processing target/product/generic/obj/APPS/Settings_intermediates/package.apk
    Done!
    Install: out/target/product/generic/system/app/Settings.odex
    Install: out/target/product/generic/system/app/Settings.apk
    Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
    Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
    target Java: SettingsTests (out/target/common/obj/APPS/SettingsTests_intermediates/classes)
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Installed file list: out/target/product/generic/installed-files.txt
    Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img

    ******************************************************
    SD FORMAT

    ==> StorageVolumePreferenceCategory
    ==> mAllowFormat = mStorageVolume != null && !mStorageVolume.isEmulated()
    android/packages/apps/Settings/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java

    SD Card Mount

    => “Preparing SD card”
    => “Damaged SD card”
    ==> ext_media_checking_notification_title
    ==> ext_media_unmountable_notification_title
    frameworks/base/core/res/res/values/strings.xml
    frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
    ===>MEDIA_UNMOUNTABLE

    *****************************************************

    #/system/etc/vold.fatab
    #/system/etc/vold.conf

    =>fatab
    ==>system/vold/main.cpp
    ===>process_config
    ====>VolumeManager
    =====>system/vold/VolumeManager.cpp
    =======>CommandListener
    ========>system/vold/CommandListener.cpp

    ********************************
    FAT
    ===> system/vold/Fat.cpp
    ====> FSCK_MSDOS_PATH
    =====> Fat::check
    ======>system/vold/Volume.cpp
    =======>createDeviceNode
    =========>Volume::mountVol
    =========>DirectVolume::handleBlockEvent

    Volume::mountVol
    ==> No impact on SDCard Mount, just for security fs

    DirectVolume::handleBlockEvent
    ==>NetlinkEvent
    ===>system/core/include/sysutils/NetlinkEvent.h
    =====>NetlinkEvent.mSubsystem==”block”, send to volume manage ==> DirectVolume::handleBlockEvent
    ======>NlActionAdd
    ========>system/core/libsysutils/src/NetlinkEvent.cpp

    ==========>system/core/libsysutils/src/NetlinkListener.cpp
    ==========>NetlinkListener::onDataAvailable

    ============>system/core/libsysutils/src/SocketListener.cpp
    ============>system/core/include/sysutils/NetlinkListener.h
    ============>class NetlinkListener : public SocketListener

    ***************************************************************************************
    *** Triger of  NlActionAdd ***

    “add”:
    =>NetlinkEvent::parseAsciiNetlinkMessage,    system/core/libsysutils/src/NetlinkEvent.cpp
    ==>NetlinkEvent::decode
    ===>NetlinkListener::onDataAvailable,        system/core/libsysutils/src/NetlinkListener.cpp
    ====>SocketListener::runListener,            system/core/libsysutils/src/SocketListener.cpp
    =====>SocketListener::threadStart,           system/core/libsysutils/src/SocketListener.cpp
    ======>SocketListener::startListener,        system/core/libsysutils/src/SocketListener.cpp
    =======>main,                                system/vold/main.cpp
    =======>NetlinkHandler::start,               system/vold/NetlinkHandler.cpp

    *** Handle of NlActionAdd ***

    “NlActionAdd”
    =>DirectVolume::handleBlockEvent,            system/vold/DirectVolume.cpp
    ==>VolumeManager::handleBlockEvent,          system/vold/VolumeManager.cpp
    ==>NetlinkHandler::onEvent,                  system/vold/NetlinkHandler.cpp

    **************************************************************************
    Framework:   MountService

    frameworks/base/services/java/com/android/server/SystemServer.java
    =>public MountService(Context context),     frameworks/base/services/java/com/android/server/MountService.java
    ==>mContext.registerReceiver(mBroadcastReceiver, filter, null, null);
    ===>BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
    ====>action.equals(Intent.ACTION_BOOT_COMPLETED)
    =====>if (state.equals(Environment.MEDIA_UNMOUNTED)) {
    int rc = doMountVolume(path);
    if (rc != StorageResultCode.OperationSucceeded) {
    Slog.e(TAG, String.format(“Boot-time mount failed (%d)”,
    rc));
    }
    ======>private int doMountVolume(String path)
    =======>mConnector.doCommand(String.format(“volume mount %s”, path));

    ==>mConnector = new NativeDaemonConnector
    ===>class NativeDaemonConnector,    frameworks/base/services/java/com/android/server/NativeDaemonConnector
    ====>public void run(),             frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
    =====>listenToSocket,               frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
    ======>mCallbacks.onDaemonConnected();     (mCallbacks=MountService)
    =======>onDaemonConnected()         frameworks/base/services/java/com/android/server/MountService.java

    **********************************************************************************
    Sd Card Mount Summary:

    frameworks/base/services/java/com/android/server/MountService.java:
    private int doMountVolume(String path):

    Use case of doMountVolume

    Case 1:  private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
    ===> Boot up SD Card mount

    Case 2:  public boolean onEvent(int code, String raw, String[] cooked)
    ===>frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
    ===>Callback
    ===>public boolean handleMessage(Message msg)
    ===> SD Card Insert mount

    Case 3: public int mountVolume(String path)
    ==> packages/apps/Settings/src/com/android/settings/deviceinfo/Memory.java
    ==> User Setting/Mount

    Case 4: public int mountVolume(String path)
    ===> frameworks/base/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
    ===> Factory Reset

  • Setup ajaxplorer on debian 6

    apt-get install nginx spawn-fcgi

    apt-get install  php5-cli php5-cgi php5-gd php5-mcrypt

     

    #change locale from C to EN UTF-8 by selecting en_US.UTF-8

    dpkg-reconfigure locales

     

    modify .brshrc by adding

    export LANG=en_US.UTF-8

     

     

     

    #config php5 nginx by install a pre-configed deb package

    dpkg -i php-nginx_0.2_all.deb

     

    # restart nginx and php

    /etc/init.d/php-fastcgi stop

    /etc/init.d/nginx restart

    /etc/init.d/php-fastcgi start

     

  • apt-get Translation-en error

    apt-get will try to do translation for it’s output:

     

    Ign http://security.ubuntu.com natty-security/multiverse Translation-en_US
    Ign http://security.ubuntu.com natty-security/multiverse Translation-en

    to avoide such translation indication, create a file in /etc/apt/apt.conf.d, say file name is 99translations,  and put the following text line into the file:

    Acquire::Languages “none”;

     

     

  • Install Alfresco 3.4 on debian

    # Install open office in headless mode

    apt-get  install   openoffice.org-headless

     

    # Install imagemagick

    apt-get install imagemagick

     

    # Build swftools from source code

    apt-get install build-essential

    wget http://www.swftools.org/swftools-0.9.2.tar.gz

    apt-get install libjpeg62-dev libfreetype6-dev libpng3-dev libt1-dev libungif4-dev

    tar xvfz swftools-0.9.2.tar.gz

    cd  swftools-0.9.2

    ./configure –prefix=/opt/local/swftools

    make

    make install

    apt-get remove –purge libjpeg62-dev libfreetype6-dev libpng3-dev libt1-dev libungif4-dev

     

    # Install tinymce

    apt-get install tinymce

     

    # Install Sun JVM6 from non-free repository

    apt-get install sun-java6-jdk

     

     

    # Install tomcat6

    apt-get install tomcat6  tomcat6-admin

    /etc/init.d/tomcat6 stop

     

    Creating standard Tomcat6 directory layout

    mkdir /opt/tomcat   

    cd /opt/tomcat   

    ln -s /etc/tomcat6/ conf   

    ln -s /usr/share/tomcat6/bin/ bin   

    ln -s /usr/share/tomcat6/lib/ lib   

    ln -s /var/lib/tomcat6/webapps webapps   

    ln -s /var/log/tomcat6/ logs

     

    # Creating a Tomcat admin user by add the following line into /opt/tomcat/conf/tomcat-users.xml

    <user name=“ADMIN_USERNAME” password=“ADMIN_PASSWORD” roles=“admin,manager” />

     

    # Creating directory for alfresco in tomcat

    mkdir -p /opt/tomcat/shared/classes

    # Add the following content into  file of  /opt/tomcat/conf/catalina.properties

    shared.loader=${catalina.home}/shared/classes,

     

    #Install and config mysql for Alfresco

    http://blog.zhenglei.net/2011/12/9/alfresco_mysql.html

     

    #Install AlfrescoCommunity 3.4e

    http://blog.zhenglei.net/2011/12/9/alfresco_mysql.html





     

     


  • intellectual property rights management

    http://www.mpegla.com/

    MPEG-2,   ATSC,   AVC/H.264,    VC-1,   MPEG4-Visual,   MPEG-2-System,  1394,  MPEG-4-System

     

    http://vialicensing.com/

     

    AAC,   AGORA-C,  Digital Radio Mondiale,  802-11(a-j),   MHP, 

    MPEG2-AAC,  MPEG4-SLS,  MPEG4-SURROUND, NFC, OCAP/tru2way

     

     

     

    http://www.innovatron.fr/calypso.html

    ISO 14443B