Articles of 初始化

为init运行python文件的Linux内核

构build一个linux内核是否可能,并且难以置信,使用内置的或者可以从内核访问的python解释器,它可以在init进程中运行一个python文件?

简单地将init更换为刚刚启动的控制台

在一台非常简单的PC上,我想用最简单的bash脚本replaceUbuntu 12.04 / sbin / init,以便拥有最less的正在运行的进程。 显然,没有X,没有USB,没有检测到新的硬件,没有升级,没有apt,没有任何东西,我只需要一个带有基于DHCP的Wi-Fi IP地址的工作控制台(ssid,密码已经存储在/ etc /networking/接口)。 就这样。 目前,我已经尝试这个replace/ sbin / init: #!/bin/sh mount -o rw,remount / mount -t proc none /proc udevd –daemon mkdir /run/network ifup -a & while [ 1 ]; do /sbin/getty -8 115200 tty1 vt100 done 它正在工作,因为我得到一个IP地址,我可以login,但是: A)在运行关机时,我得到“关机:无法closures系统:” B)control-c在控制台中不工作 C)login后,我得到:“bash:不能设置terminal进程组(-1):不适当的ioctl设备” D)login后,我得到:“bash:这个shell中没有作业控制” 另外,我注意到所有的用户空间进程都有一个“?” 在运行ps avx的tty列中。 我怎样才能解决这些问题? 我不想用新贵来真正控制电脑上启动的东西,而且最低限度。

初始化脚本是否需要守护进程?

我正在为获取为web服务器shiny-server编写的初始化脚本( shiny-server是R包的一个版本,允许您运行基于R的独立Web应用程序)。 我正在通过Gentoo手册:编写初始脚本,并且正在阅读Gentoo开发者指南 (因为我的最终目标是开发一个用于在Gentoo上安装这个工具的ebuild,尽pipe如此)。 我在启动初始化脚本时遇到了一些麻烦,因此请求Shiny Google Group寻求帮助,其中一位开发人员提供了一个解决scheme,但是同时出现了Gentoo是否期待的问题… a)为每个进程启动一个pid文件。 b)在Gentoo下分离和保存这样一个过程是否是“最佳实践”。 我不知道,但我正在寻求build议,反馈给开发人员,他们似乎非常开放,接受他们的软件,并与分配工作。 目前我的初始化脚本,工作,看起来像…. #!/sbin/runscript depend(){ after net } start(){ ebegin "Starting shiny-server" start-stop-daemon –start –exec /usr/bin/shiny-server >> /var/log/shiny-server.log 2>&1 local _retval=$? eend "${_retval}" } stop(){ ebegin "Stopping shiny-server" start-stop-daemon –start –exec /usr/bin/shiny-server >> /var/log/shiny-server.log 2>&1 local _retval=$? eend "${_retval}" } 在此先感谢您的时间, slackline

编写我自己的init可执行文件

我想在一个下雪的周末创build自己的init和一些Linux的乐趣。 我知道,内核使用rootfs启动,并在一些驱动程序加载和磁盘安装后将stream传递给/ sbin / init。 我下载了Ubuntu的云镜像,并尝试用kvm直接启动内核,如下所示: kvm -m 1G -nographic -kernel vmlinuz-3.19.0-32-generic -initrd initrd.img-3.19.0-32-generic -append "console=ttyS0 root=/dev/sda1 rw init=/myinit" -hda mydisk.img 它与trusty-server-cloudimg-amd64-disk1.img(如果你不介意挂在cloud-init上)工作得很好,然后我复制它并删除它的内容。 modprobe nbd qemu-nbd -c /dev/nbd0 mydisk.img fdisk -l /dev/nbd0 # confirm partition mount /dev/nbd0p1 disk/ # Delete all files with myinit.c and myinit 这是我的魔法初始化: int main(){ printf("Welcome to my kernel\n"); printf("Welcome to my […]

valgrind是否通过驱动程序跟踪内存初始化?

valgrind从这样的代码报告未初始化的内存错误: unsigned char buf[100]; struct driver_command cmd; cmd.len = sizeof(buf); cmd.buf = buf; ioctl(my_driver_fd, READ, &cmd); for(i = 0; i < sizeof(buf); i++) { foo(buf[i]); /* <<— uninit use error from valgrind */ } 如果我在驱动程序调用之前memset()buf错误消失。 valgrind可以检测linux驱动程序是否正确写入缓冲区? (我看着驱动程序代码,似乎是正确的,但也许我错过了一些东西。) 还是只是通过驱动程序调用,并无法知道缓冲区已经写入内核? 谢谢。

Valgrind,“未初始化的值”错误

在我的C程序中,我使用malloc()分配内存,与calloc() ,它不初始化内存,它可能仍然包含垃圾。 大多数情况下,在分配的上下文中,我不会对malloc()分配的内存进行任何更改。 (例如,在初始化包含缓冲区的结构的函数中,我不会更改缓冲区的内存,但稍后会进行更改)。 Valgrind给了我很多错误: 条件跳转或移动取决于未初始化的值(s) 使用大小为4的未初始化的值 我肯定永远不会从这些情况下未初始化的内存中读取。 我应该忽略它们还是更好地初始化分配内存? 万一我应该忽略它们,我怎样才能在Valgrind中closures这个错误信息呢? 例1 : ==4253== Conditional jump or move depends on uninitialised value(s) ==4253== at 0x408EB8E: vfprintf (vfprintf.c:1624) ==4253== by 0x4093C2E: printf (printf.c:35) ==4253== by 0x40624D2: (below main) (libc-start.c:226) ==4253== Uninitialised value was created by a heap allocation ==4253== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==4253== by 0x8048938: […]

如何configurationElasticSearch以在崩溃后重新启动

使用ElasticSearh的apt-get包,如何configuration服务在Ubuntu上崩溃后自动重启?

Linux共享库的init和deinit也使用c ++静态初始化

我想要自动调用来初始化和取消初始化我的共享库。 在我的共享库中,由于使用了第三方代码(例如UnitTest ++),我需要一些C ++对象的静态初始化。 当我的init函数被执行时,我需要保证C ++对象(所有链接的翻译单元的所有静态初始化)完成(反之亦然deinit); 所以在C ++程序中,只需要执行main()的条件即可。 我见过很多有关linux共享库init / deinit的信息,例如: 加载共享库时自动执行的函数 如何在Linux上初始化一个共享库 http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html#INIT-AND-CLEANUP 但提供的解决scheme不适合我的需求。 在这两种方法( __attribute__((constructor))甚至-Wl,-init,<function name> )中,init函数似乎在C ++对象的静态初始化完成之前被调用。 我也玩过__attribute__ ((init_priority(…)))如: class InitAndDeinit { public: InitAndDeinit() { // Do some initialization } ~InitAndDeinit() { // Do some cleanup } } initAndDeinit __attribute__((init_priority(65535))); 但是这也不会把电话打到理想的地步; 即使__attribute__((constructor(65535))) 。 我用gcc 4.6.4,4.7.3和4.8.1(4.6.4显示了有关__attribute__((constructor)) )sorting略有不同的行为)。 有什么build议么? 我目前的解决方法是提供必须由应用程序手动调用的导出函数(lib_init()和lib_deinit())。

如何在Linux上初始化一个共享库

我正在Linux下开发一个使用C ++的共享库,我希望这个库使用log4cxx来进行日志logging。 不过,我不确定如何设置。 为了使log4cxx正常工作,我需要创build一个logging器对象。 我怎样才能确保这个对象是我的库加载时创build的? 我怀疑创buildlogger对象作为全局variables是最简单的,然后从我的库的任何源文件中使用它,在头文件中声明它为extern。 但是,一旦应用程序连接到库,如何自动创buildlogging器呢? 我知道在Windows的DLL中,有一样东西是REASON_FOR_CALL == PROCESS_ATTACH; 在Linux下有没有类似的东西?

互斥体在boost regex构造函数中声明

我使用ARM的boost 1.47,Code Sourcery C ++编译器(4.5.1),针对Ubuntu的Windows 7进行交叉编译。 当我们编译debugging版本(即断言被启用)时,会触发一个断言: pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion 'mutex->__data.__owner == 0' failed. 在释放模式下编译,assert没有被触发,程序工作正常(据我们所知)。 这是在Ubuntu 10.xarm板下发生的。 所以,似乎pthread_mutex_lock认为互斥体是由与当前不同的线程设置的。 在我的程序中的这一点上,我们仍然是单线程的,通过在main中打印出pthread_self并在调用正则expression式构造函数之前进行validation。 也就是说,它不应该断言断言。 下面是触发问题的代码片段。 // Set connection server address and port from a URL bool MyHttpsXmlClient::set_server_url(const std::string& server_url) { #ifdef BOOST_HAS_THREADS cout <<"Boost has threads" << endl; #else cout <<"WARNING: boost does not support threads" << endl; #endif […]